弱い参照とソフト参照の概念を知ることは、それらの使用方法とは異なります。ガベージコレクターは、リサイクル基準を満たすオブジェクトのメモリを取り戻すことを知っていますが、すべてのプログラマーがリサイクル基準がオブジェクトを指す基準のタイプに依存することを知っているわけではありません。これは、Javaの弱い参照とソフト参照の主な違いです。オブジェクトがそれを指す弱い基準しかない場合、ゴミコレクターはすぐにオブジェクトをリサイクルします。これは、それをリサイクルする緊急の方法です。比較的、これらのオブジェクトを指すソフト参照がある場合、JVMがメモリを必要とする場合にのみリサイクルされます。弱くて柔らかい引用の特別な動作により、場合によっては非常に便利になります。たとえば、ソフト参照は、JVMがメモリを必要とするときによく使用できます。弱い参照は、クラスローダー参照を保存するなど、メタデータの保存に非常に適しています。クラスがロードされていない場合、クラスローダーへの参照もありません。最後の強い参照が削除されると、弱い参照クラスローダーのみがリサイクルされます。この記事では、次のようなさまざまなタイプのJava参照について説明します。
Javaの弱い参照とソフト参照
Javaには4種類の参照があります。
1。強力な参照
2。弱いreference
3。ソフトランス
4。幻想
強力な参照は、コード文字列s = "ABC"の変数sなど、プログラミングで使用する最も単純な参照です。強力な参照によって指摘されたオブジェクトは、ガベージコレクターによってリサイクルすることはできず、これらのオブジェクトはプログラムで必要です。弱い参照はjava.lang.ref.weakreferenceクラスクラスで表され、次のコードを使用して弱い参照を作成できます。
コードコピーは次のとおりです。
カウンターカウンター=新しいカウンター();
weakreference <counter> weakcounter = new weakreference <counter>(counter);
counter = null;
強力な参照オブジェクトのカウンターにnull値を割り当てる限り、オブジェクトはガベージコレクターによってリサイクルできます。オブジェクトには現時点では他の強い参照が含まれていないため、オブジェクトに弱いカウンターポイントでさえ、ガベージコレクターがオブジェクトのリサイクルを防ぐことができません。逆に、オブジェクトにソフト参照が含まれている場合、JVMがメモリを必要としない限り、カウンターオブジェクトはすぐにリサイクルされません。 Javaのソフト参照は、java.lang.ref.softreferenceクラスで表されます。
コードコピーは次のとおりです。
Counter Prime = new Counter();
softreference soft = new softreference(prime);
prime = null;
強力な参照が空になった後、コードの2番目の動作はソフトリファレンスを作成します。ソフト参照と弱い参照の違いを考えると、ソフト参照はキャッシュメカニズムにより適していますが、弱い参照はメタデータの保存に適しています。弱い参照を使用するもう1つの例は、HashMapとTreemap以外のMAPインターフェイスの別の実装であるWeakHashmapです。 WeakHashmapには機能があります。マップ内のキーは弱い参照としてカプセル化されています。つまり、強力な参照が削除されると、WeakHhashmap内の弱い参照は、ガベージコレクターによってオブジェクトが収集されるのを防ぐことができません。
仮想参照は、java.lang.ref.phantomreferenceクラスで表されるjava.lang.refパッケージで3番目の利用可能な参照です。仮想参照を持つオブジェクトは、ガベージコレクターによっていつでもリサイクルできます。弱い参照やソフト参照と同様に、次のコードから仮想参照を作成できます。
コードコピーは次のとおりです。
DigitalCounter digit = new DigitalCounter();
Phantomreference Phantom = new Phantomreference(桁);
digit = null;
強力な参照が削除されると、3列目のデジタルカウンターオブジェクトは、いつでもゴミコレクターによってリサイクルできます。オブジェクトを指す仮想参照は1つしかないため、仮想リファレンスでは、ガベージコレクターがオブジェクトを再生するのを防ぐことができません。
弱い参照、ソフト参照、仮想参照、およびWeakHashmapを理解することに加えて、参照キューも理解する必要があります。弱い参照、ソフト参照、仮想参照を作成するプロセスでは、次のコードを介して参照キューリファレンスキューを提供できます。
コードコピーは次のとおりです。
ReferenceQueue refqueue = new ReferenceQueue();
DigitalCounter Digit = new DigitalCounter();
Phantomreference <DigitalCounter> phantom = new Phantomreference <DigitalCounter>(digit、Refqueue);
参照インスタンスが参照キューに追加され、リファレンスキューをいつでもクエリすることでオブジェクトをリサイクルできます。オブジェクトのライフサイクルは、以下の図で説明できます。