2

MaptoSoftReferencesから構築されたキャッシュがあります。それらが追加されると、それらは別のキューに入れられ、gzipなどを介して遅延圧縮されます。私の考えは次のとおりです。圧縮キュー内のオブジェクトへのWeakReferencesが必要です。これにより、コンプレッサータスクがオブジェクトに到達したときに、オブジェクトが既になくなっている場合は、わざわざ圧縮する必要がなくなります。また、コンプレッサーのキューはオブジェクトを圧縮しません。 t他の方法ではGCされるオブジェクトを存続させます。

では、SoftReferenceが1つとWeakReferenceが1つしかない場合でも、SoftReferenceのセマンティクスは適用されますか?

4

3 に答える 3

3

はい、SoftReferencesのセマンティクスは引き続き適用されます。SoftReferencesはWeakReferencesよりも強力です。

弱参照は基本的にGCには存在しないものとして扱われます。そのため、到達可能性が低いオブジェクトはすぐにGCされる可能性があります。ただし、最強のタイプとしてSoftReferencesによってのみ到達可能なオブジェクトは、メモリの需要を満たす必要がある場合にのみGCの対象と見なされます。

したがって、ソフト参照と弱参照の両方がある場合は、SoftReferenceのセマンティクスが適用されます。

弱い参照オブジェクト。指示対象がファイナライズ可能になり、ファイナライズされてから再利用されるのを妨げません。

http://download.oracle.com/javase/6/docs/api/java/lang/ref/WeakReference.html

ソフト参照オブジェクト。メモリ要求に応じてガベージコレクタの裁量でクリアされます。ソフト参照は、メモリに依存するキャッシュを実装するために最もよく使用されます。

http://download.oracle.com/javase/6/docs/api/java/lang/ref/SoftReference.html

于 2010-10-03T23:01:41.063 に答える
2

はい、ほぼ1つの強参照を持つまで、必要な数のソフト/ウィーク参照を持つオブジェクトをGCするのに問題はありません。

于 2010-10-03T23:04:09.733 に答える
0

Weak Reference常に前に収集することに注意してくださいSoft Reference。そして、Soft Referenceしばしば何かをキャッシュするために使用します。

つまり、その時点では、存続する必要はありませんが、将来的には、もう一度必要になる可能性があり、Javaが新しいオブジェクトをインスタンス化するために再び機能することはありません。

于 2012-03-23T03:48:54.473 に答える