メモリリークとメモリオーバーフローについて

3070 ワード

前言
最近メンテナンスを担当しているプロジェクトでメモリオーバーフローが発生しましたが、今日はちなみにメモリ漏れとメモリオーバーフロー
簡単な説明:
一、メモリオーバーフローとメモリ漏洩の通俗的な言い方.1、メモリオーバーフロー:例えば100バイトのスペースを申請したが、このスペースに101バイト以上のデータを書き込むと、オーバーフローが発生する.2、メモリ漏洩:新しいオブジェクトを作成してメモリを申請した後、このオブジェクトは長い間使用されなくなった(当然解放されるべきだ)が、あるインスタンスまたはいくつかのインスタンスに所有されているため、GCは回収できない.つまり、解放されたオブジェクトは解放されていない.
具体的にご紹介します.
1.1メモリオーバーフローjava.lang.OutOfMemoryErrorとは、プログラムがメモリを申請する際に十分なメモリ領域がなく、OutOfMemoryErrorが現れることを意味する.
発生原因
このエラーの原因は主に次のとおりです.
 1 JVM    。
 2      ,        。

プログラムが一般的に現れる場合、プログラム上の体現は以下の通りである.
1メモリにロードされるデータの量が大きすぎて、一度にデータベースからデータを取り出しすぎるなどです.2集合クラスにはオブジェクトへの参照があり、使用後は空になっていないため、JVMは回収できません.3コードには、デッドループまたはループが重複しすぎたオブジェクトエンティティが存在します.4使用するサードパーティ製ソフトウェアのバグ.5起動パラメータメモリ値の設定が小さすぎます.エラーメッセージこのエラーによくあるエラーメッセージ:
tomcat:java.lang.OutOfMemoryError: PermGen space
tomcat:java.lang.OutOfMemoryError: Java heap space
weblogic:Root cause of ServletException java.lang.OutOfMemoryError
resin:java.lang.OutOfMemoryError
java:java.lang.OutOfMemoryError

解決策
1 JVMのメモリサイズを増やす
tomcatコンテナの場合、tomcatのコンピュータでのインストールディレクトリを見つけ、このディレクトリに入り、binディレクトリに入り、window環境でbinディレクトリのcatalina.batを見つけ、linux環境でcatalina.shを見つけます.catalina.batファイルを編集し、JAVAを見つけます.OPTS(具体的にはset「JAVA_OPTS=%JAVA_OPTS%%LOGGING_MANAGER%」)というオプションの場所ですが、このパラメータはJava起動時に必要な起動パラメータです.オペレーティングシステムの環境変数でJAVA_OPTSは、tomcatが起動すると、オペレーティングシステムの環境変数の値を読み出してロードするので設定します.オペレーティングシステムの環境変数を変更した場合は、マシンを再起動し、tomcatを再起動する必要があります.tomcatプロファイルを変更した場合は、プロファイルを保存し、tomcatを再起動する必要があります.設定は有効になります.2プログラムを最適化し、ごみを放出する主な考え方は、プログラムの体現上の状況を避けることである.デッドサイクルを回避し、一度に多くのデータをロードすることを防止し、プログラムの堅牢性を高め、タイムリーに解放します.したがって,Javaメモリオーバーフローを根本的に解決する唯一の方法は,プログラムを修正し,無駄なオブジェクトをタイムリーに解放し,メモリ空間を解放することである.
1.2メモリ漏洩
Memory Leakとは、プログラムがメモリを申請した後、申請したメモリ空間を解放することができず、一度のメモリ漏洩の危害は無視できるが、メモリ漏洩の堆積結果は深刻で、どれだけのメモリでも遅かれ早かれ光を占めることになる.Javaでは、メモリ漏洩は割り当てられたオブジェクトが存在し、これらのオブジェクトには次の2つの特徴がある:1)まず、これらのオブジェクトは達成可能であり、すなわち、有向図では、存在経路が接続可能である.2)次に,これらのオブジェクトは不要である,すなわち,プログラム以降はこれらのオブジェクトを使用しない.オブジェクトがこの2つの条件を満たす場合、これらのオブジェクトはJava内のメモリ漏洩と判定することができ、これらのオブジェクトはGCで回収されないが、メモリを消費する.
メモリ漏洩に関する処理ページは、メモリ漏洩が純粋なコードレベルの問題であるため、プログラムの堅牢性を高めることです.
1.3メモリオーバーフローとメモリ漏洩の連絡
メモリが漏洩すると、最終的にメモリがオーバーフローします.同じ点:アプリケーションの実行に問題が発生し、パフォーマンスが低下したり、停止したりします.相違点:
  • メモリ漏洩はメモリオーバーフローの原因の一つであり、メモリ漏洩が蓄積されるとメモリオーバーフローを引き起こす.
  • メモリ漏洩はコードを完備することで回避でき、メモリオーバーフローは構成を調整することで発生頻度を減らすことができるが、徹底的に回避することはできない.