1

弱参照またはソフト参照を使用するReferenceQueue場合、オブジェクトが実際にメモリから削除されるのはいつですか? referancequeue.removeまたは referancequeue.poll()メソッドを呼び出す必要がありますか?

例:

ReferenceQueue q = new ReferenceQueue();
WeakReference wr = new WeakReference(object, referenceQueue);


if (pr.isenqueued()) {

   // do something

}

またはフォローする必要がありますか?

WeakReference weakref=null;

if ((weakref=q.removed())!=null) {

   // do something

}
4

2 に答える 2

1

あなたの例では、WeakReference は、到達できないときにガベージ コレクターによってクリーンアップされます。一方、SoftReferences を使用すると、十分なメモリがある限り、ソフトに到達可能なオブジェクトが保持されます。したがって、永続化する場合は、SoftReference を使用する必要があります。コントロール、つまり2番目の方法があれば、安心できると思います。GC ではなく自分でクリーンアップ操作を行いたい場合は、進行を確実にするために、代わりに PhantomReference を使用できます。それらは、エンキューされる前に、ガベージ コレクターによって自動的にクリアされません。

于 2012-11-30T08:16:17.720 に答える
0

それらを ReferenceQueue から削除した後、オブジェクトをファイナライズできます。ファイナライズした後、次の GC で削除できます。

于 2012-10-22T10:18:19.660 に答える