AVAの最も明白な利点の1つは、そのメモリ管理メカニズムです。単にオブジェクトを作成するだけで、Javaのゴミ回復メカニズムはメモリの割り当てと放出の原因です。ただし、メモリの漏れはJavaアプリケーションでしばしば発生するため、想像上ほど単純ではありません。
このチュートリアルでは、メモリリークとは何か、メモリリークがある理由、およびメモリの漏れを防ぐ方法を示しています。
メモリリークとは何ですか?
定義:オブジェクトがアプリケーションで使用されなくなったが、他の場所で引用されているため、ゴミリサイクルを削除することはできません(これにより、多くのメモリが不合理になり、メモリオーバーフローが生じます。翻訳)。
この定義を理解するには、メモリ内のオブジェクトの状態を理解する必要があります。以下の図は、使用されていない人を示しており、それらは引用されていません。
図から、参照オブジェクトと未準備のオブジェクト(範囲)を見ることができます。引用されたオブジェクトは、ゴミリサイクルメカニズムによってリサイクルされることはできません。また、参照オブジェクトは、ゴミ回復メカニズムによってリサイクルできません。もちろん、それを引用する他のオブジェクトがないため、ターゲットは使用されません。ただし、すべてのオブジェクトが引用されているわけではありません。一部の未使用のオブジェクトはまだ他の場所で引用されています!これがメモリの漏れの原因です。
なぜメモリ漏れが発生するのですか?
メモリリークが発生する理由を確認するために、以下のこの例を見てみましょう。次の例では、AオブジェクトはBオブジェクトを参照します。 Aのライフサイクル(T1-T4)は、Bのライフサイクル(T2-T3)よりもはるかに長くなります。Bがアプリケーションで使用されなくなった場合、AはまだBへの参照を保持しています。このようにして、ゴミ回復メカニズムはメモリからBを除去することはできません。他の多くのオブジェクトがAのような場合、メモリでリサイクルできない多くのオブジェクトが存在するため、これはメモリスピルオーバーを引き起こす可能性があります。
また、Bが他のオブジェクトへの多数の参照を保持している可能性もあります。 Bで参照されるこれらのオブジェクトはリサイクルされません。これらの未使用のオブジェクトはすべて、貴重なメモリスペースを消費します。
メモリリークを防ぐ方法は?
以下は、メモリの漏れを防ぐためのいくつかの高速なスキルです。
1.ハッシュマップ、アレイリストなど、コレクションクラスに注意してください。メモリリークが頻繁に発生する場所であるためです。それらが静的オブジェクトとして宣言される場合、それらのライフサイクルは、アプリケーションのライフサイクルと同じくらい長くなります。
2。インシデントモニターとコールバックに注意してください。クラスがリスナーに登録されているが、カテゴリが使用されなくなった場合、監視デバイスはキャンセルされず、メモリリークが発生する可能性があります。
3。「クラスが自分のメモリを管理する場合、プログラマーはメモリの漏れに注意する必要があります[1]。