JAvaでの参照(強参照、ソフト参照、弱参照、虚参照)

1426 ワード

1.強引用(StrongReference)最も一般的な引用であり、実現も簡単である
Object o = new Object();

特徴:強引用オブジェクトは強情で、JVMが停止した時に終了します.そうでなければnullにしても、OOMにしてもGCされません.
2.ソフトリファレンスは、ソフトリファレンスを使用する理由を先に説明します.実際の作業では、数分前にクエリーしたデータをクエリーする必要があります.一般的に、これらのデータを迅速に取得するには、メモリに置く必要がありますが、メモリ容量は限られています.このまま保存していると、明らかにだめです.このときソフトリファレンスが役に立ち、メモリ容量が不足したときにソフトリファレンスオブジェクトが自動的に回収されます.実装コード:
SoftReference obj = new SoftReference(object);
object = null; 
System.gc(); 
obj.get();

特徴:メモリが十分で、回収しないメモリが不足して、回収する
3.弱引用同様に、ここでは弱引用をなぜ使うのか説明します.ソフトリファレンスの使用はOOMの問題を解決するためであると述べたが,今では別のシーンについて考える.今、Object oがあります.それをキーとしてHashMapに入れます.oをnullに設定すると、oは回収されません.HashMapに参照されているからです.しかし、実際にはこのoは必要ありません.弱い参照を使用すると、この問題を解決することができます.
Object obj = new Object();
WeakReference wf = new WeakReference(obj);
obj = null;
wf.get();//      null
wf.isEnQueued();//                    

特徴:メモリに関係なく、オブジェクトがnullに設定されている場合、GCで回収されます.
4.虚引用は幻想引用とも呼ばれ、この引用もよく理解されています.このタイプの引用は、メモリが十分であるかどうかにかかわらず、オブジェクトがnullに設定されているかどうかにかかわらず、GCさえあれば回収されます.実装コード:
Object obj = new Object();
PhantomReference pf = new PhantomReference(obj);
obj=null;
pf.get();//    null
pf.isEnQueued();//            

特徴:ゴミ回収必ず回収用途:対象がメモリから削除されるかどうかを検査するのによく使われる
前に1つのとても面白い総括を见たことがあります:强引な引用は大きい妻のようで、関系は强固で柔らかい引用は2番目の妻のようで、寵愛を失うかもしれません弱い引用は恋人のようで、関系は不安定で、他の人と虚の引用を走ったかもしれません女神のようで、梦の中で考えるしかありません