Javaオブジェクトの強さ、ソフト、弱さ、虚引用+ReferenceQue


Javaオブジェクトの強さ、ソフト、弱さ、虚引用+ReferenceQue
一、強引用(StrongReference)
強引用は最も一般的な参照を使用します。もし一つの対象が強い引用を持っているなら、ゴミ回収器は決して回収しません。メモリの空間が足りない時、Java仮想マシンはOutOfMemoryErrエラーを抛り出してもよく、プログラムを異常終了させても、強い参照を持つオブジェクトを自由に回収してメモリ不足の問題を解決しません。
二、ソフト引用(SoftReference)
もし一つのオブジェクトがソフト参照しか持っていないなら、メモリのスペースが十分です。ゴミ回収器は回収されません。メモリ容量が足りないと、これらのオブジェクトのメモリが回収されます。ゴミ回収器が回収されていない限り、対象はプログラムで使用できます。ソフト参照は、メモリに敏感なキャッシュ(以下、例を示す)を実現するために使用されてもよい。
ソフト引用は参照列と連携して使用できます。ソフト引用で参照されたオブジェクトがごみ箱に回収されると、Java仮想マシンはこのソフトを関連する参照列に追加します。
三、弱引用(WeakReference)
弱い引用とソフト引用の違いは、弱い引用の対象だけがより短いライフサイクルを持つことです。ゴミ回収スレッドが所管するメモリ領域をスキャンする過程で、弱い参照のみの対象が発見されると、現在のメモリ空間が十分であるかどうかにかかわらず、メモリが回収されます。ただし、ゴミ回収器は優先度が低いスレッドであるため、弱い参照のみの対象がすぐに見つかるとは限らない。
弱い引用は引用列と連携して使用することができ、弱い引用の対象がごみによって回収されると、Java仮想マシンはこの弱い引用を関連する参照列に加えることができる。
四、虚引用(PhotomReference)
「虚引用」はその名の通り虚構であり、他の幾つかの引用とは違って、虚引用は対象のライフサイクルを決定しない。もし一つのオブジェクトが虚引用だけを持っているなら、それは何の引用もないのと同じで、いつでもごみ箱に回収されます。
虚引用は主に対象のゴミ回収器の回収活動を追跡します。虚引用と軟引用と弱引用の違いは、虚引用は引用列と連携して使用しなければならないということです。ゴミ回収器が一つの対象を回収しようとすると、虚引用があると発見されると、対象のメモリを回収する前に、この虚引用を関連する引用列に追加します。

ReferenceQueue queue = new ReferenceQueue (); 
PhantomReference pr = new PhantomReference (object, queue); 
プログラムは、参照列に虚引用が入っているかどうかを判断することにより、参照対象がゴミ回収されるかどうかを知ることができます。プログラムが何らかの虚参照が参照キューに追加されていることを発見した場合、参照対象のメモリが回収される前に必要な行動をとることができます。
五、ReferenceQue
 これは一つの引用列です。もし保存されているのがReferenceオブジェクトそのものであれば、Referenceが参照しているオブジェクトはGCで回収されますが、Referenceは無効になりました。
このようなReferenceは引用列に入れられます。ここでそれをクリアして、占有空間を避けることができます。
六、WeakhashMap
弱引用map:Keyキーは弱い参照のキーで、もしKeyキーが回収されたら、mapの値をgetした後、自動的にremoveがvalueを削除します。
キーが常に強い引用されている場合は、回収されません。
Valueは強い引用されているので、Valueを間接的にキーを引用しないように注意してください。
これは、Keyのライフサイクルコントロールに適したキャッシュです。
読んでくれてありがとうございます。みなさんのご協力をお願いします。ありがとうございます。