Javaのメモリリークやメモリ・オーバーフロー

A:定義

  メモリリークが:(メモリリーク)もはやオブジェクトを再利用することができない使用されるであろうメモリは、メモリリークであります

              オブジェクトへの強い参照点が回復されることはありません、それはメモリリークにつながる可能性があり、仮想マシンがOOMが、むしろ彼のポイントのオブジェクトを再利用投げるだろう行くことはありません

                                                 あなたがスペースを開いたリソースを使用するとき、彼はあなたが自由アップリソースが不足しており、この時間は、メモリに占領されたとき、忘れることのためにあることを意味し、時間は問題ではないが、メモリリークの数は、より多くのメモリ・オーバーフローにつながります

  メモリオーバーフロー:(メモリー--- OOMのうち)が、使用するアプリケーションのための十分なメモリがない場合、またはそれはあなたのint型のデータを格納するストレージスペースを与え、アプリケーション・プログラム・メモリを指していますが、長いデータ型を格納する必要が、その結果は、十分なメモリではありません

                    このとき、エラーは、我々は大規模なメモリがオーバーフローに起因するメモリを使用するのに十分なメモリではありません持っているよりもOOM、いわゆるメモリオーバーフローが、要するに、彼らはスペースを使用する必要があるだろう

  リリースメモリ:到達不能オブジェクトクリーンアップ、およびGCは、アプリケーション、参照、参照および割り当てなどを含め、各オブジェクトの状態を監視して決定は、GCで行われています。オブジェクト基礎となる原理は、オブジェクトが使用できないということですリリース

II:4つの電界を発生するリークメモリ

1.再発メモリリーク。複数回実行されるコードメモリリーク、実行されるたびに、メモリリークにつながります。
2.エピソードメモリリーク。コードメモリリークが特定の環境やプロセスの動作が発生するのみで発生します。散発的な再発と対向しています。特定の環境では、散発的には、おそらくそれは、多くの場合で作られてしまいます。だから、メモリリークを検出するためのテスト環境と試験方法が不可欠です。
前記ワンタイムメモリリーク。コードメモリリークが一回だけ実行、またはアルゴリズムの欠陥によるものであろう、常にちょうど原因とメモリリークが発生します。例えば、コンストラクタクラスのメモリに割り当てられますが、メモリリークが一度だけ行われるように、メモリデストラクタを解放しませんでした。
4.暗黙メモリリーク。ノンストッププログラムはだけ空きメモリの最後まで、動作時にメモリを割り当てます。厳密に言えば、メモリリークは、すべてのアプリケーションの最終的なプログラムメモリの解放ので、ここでは発生しませんでした。しかし、サーバープログラムのために、あなたはタイムリーなメモリを解放していない、数日、数週間、あるいは数ヶ月、数を実行するために必要な、すべてのメモリが最終的にシステムが不足する原因になります。そこで、我々は、暗黙的なメモリリークのメモリリークのこのタイプを呼び出します。

ビューのユーザプログラムのポイントの観点から、メモリ自体が漏れる害が発生しない、一般のユーザーとして、メモリリークの存在を感じることはありません。実害は最終的に、すべてのシステムメモリが使い果たされる消費されるメモリリークの蓄積です。この観点から、ワンタイムメモリリークおよび害からそれが蓄積し、危険暗黙メモリリークしないため、再発エピソードメモリリークと比較して、非常に大きく、検出されることがより困難です

3:メモリオーバーフローとソリューションの発生

1:メモリオーバーフロー理由は:
  メモリ1にロードされたデータの量は、データベースから抽出されたように大きすぎ、あまりにも多くのデータであり、
  前記コレクション・クラスは、使用後に空にしないオブジェクトへの参照を持っている、JVMようにリサイクルすることができない;
  3。 ;デッドサイクルまたはオブジェクトコードの過剰な物理的存在の繰り返し周期
  BUG 4によって使用されるサードパーティ製ソフトウェア、
  5メモリを開始するには小さすぎるパラメータ値が設定されている
2:原因と溶液メモリオーバーフロー:
  1:レビューJVMの起動パラメータは、直接メモリを増やします。(-Xms、-Xmxパラメータを追加することを忘れてはなりません。)
  2:その他の異常やエラーがエラーの前にあるかどうか「のOutOfMemory」を参照し、エラーログを確認してください。
  3:コードは、メモリのオーバーフローの可能性のある領域を識別するウォークスルーと分析。
  4:メモリ・ビュー・ツール動的ビューのメモリ使用量の使用  

1メモリリーク)の最初の例:フォー

 

 

2):メモリリークの第二の例

 

四つ 3):メモリリークの第三の例

 

四つ 4):メモリリークの第4の実施例

 

 5:どのようにメモリリークを防ぐために

  1:特別なオブジェクトのHashMap、ArrayListのコレクションのようないくつかの注意、彼らは多くの場合、メモリリークにつながります。それらは、静的、そのライフサイクルとして宣言され、アプリケーション限りとなります場合には

  2:close()メソッドのない転送がない場合、リソースは、メモリリークがシャットダウンしない原因

  3:すべてのデータを取得するクエリがある場合は、データベースクエリを確認してください。1がメモリに何千ものレコードを取る場合は一般的に、それはメモリオーバーフローを引き起こす可能性があります。

   この問題は、むしろ、データベース内の行の前、少ないデータに隠され、容易ではない問題は、ライン上で、データベース内のより多くのデータは、クエリが原因メモリのオーバーフローに起因する可能性が高いです。だから、使用データベースクエリページのクエリを最大化するための方法について

  4:無限ループまたはコードをチェックする再帰呼び出しがあります

  5:检查是否有大循环重复产生新对象实体

  6:检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收

おすすめ

転載: www.cnblogs.com/s6-b/p/12112048.html