次のように数日前にインタビューするためにどのように、メモリについて尋ねられたとき、手書きのコードを漏洩し、補正は少しモンゴルだった、と後でインタビュアーは、3行のコードを書きました
1つの オブジェクトOBJ1 = 新しいオブジェクト(); 2 オブジェクトOBJ2 = 新しいオブジェクト(); 3 OBJ1 = OBJ2。
なぜ、メモリリークかどうかを分析してみてください、
まずは、メモリリークがBaiduの百科事典は答えを与える?何であるかを見てみましょう
単純には、ヒープメモリがまだある、それが洗浄されていない、我々は不要なオブジェクトを持っていることを意味するが、このプロジェクトでは、それは、その後、常に存在するオブジェクトは、スペースが蓄積されないであろう長期一旦終了します。
上記のコードは、オブジェクトがOBJ2 OBJ1、OBJ2に割り当てられたが、依然として元のアドレス値とOBJ2がいない参照し、今回OBJ2が、メモリリークが発生し、メモリリーク、あります
解決策はただobj2が= nullに、非常に簡単です。GCはリサイクルすることができ
これは、強い参照を持っているという概念を必要とします
強力な引用:一般的な普通のオブジェクト参照は、限りオブジェクトへの強い参照点があるとして、それはオブジェクトがまだ「生きている」、lajihuのガベージコレクタは限りにわたり、無他の文献であれば喜びに、通常のオブジェクトのためにそのようなオブジェクトを再利用しないことを意味します。表示範囲又は(強い)を割り当てる基準に対応する参照がnullの場合、ガベージコレクションであってもよいです。
ソフト参照:SoftReference、弱い及び強いのいくつかのアプリケーションに対しては、オブジェクトは、いくつかのガベージコレクションを除外することができ、JVMはメモリ不足と考えた場合にのみ、唯一のソフト参照オブジェクトのポインティングを回復しようとするようになっています。JVMは、ソフト参照オブジェクト指向をクリーンアップ、OutOfMemoryErrorをスローする前にそれを保証します。これは、メモリが不足しない、同時にキャッシュを使用することを保証します。
弱参照:オブジェクトの免除は、ガベージコレクションを作成していないだけで弱参照の状態でオブジェクトにアクセスする方法を提供します。オブジェクトはまだそれを使用し、取得しようとすると、または再インスタンス化されている場合、彼はまた、キャッシュの実装オプションがたくさんあります。
ファントム参照:また、ファントム参照として知られている、あなたはオブジェクトを介してアクセスすることはできません。唯一のオブジェクトは、後に、このような事後クリーンアップメカニズムとして特定の物事を、行うためのメカニズムを提供します確定
オブジェクト到達可能性状態のフロー図:
すべての参照型ははjava.lang.ref.Referenceは、get()fangfaを提供する抽象クラスのサブクラスです。
また、ファントムを(リターンがヌル取得)を参照して、オブジェクトが破棄されていない場合、あなたは、私たちはオブジェクトへのアクセス権を持つことができるのget()メソッドを介して、元のオブジェクトを取得することができ、強い基準点は、再び人々はオブジェクトの世紀に到達することはありません状態。