1

When using weak or soft reference with a ReferenceQueue when is the object really removed from memory? Do I have to call referancequeue.remove or referancequeue.poll() methods?

Example:

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


if (pr.isenqueued()) {

   // do something

}

or do I have to following?

WeakReference weakref=null;

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

   // do something

}
4

2 回答 2

1

在您的示例中,WeakReference 将在无法访问时被垃圾收集器清理。另一方面,如果您使用 SoftReferences,只要有足够的内存,就会保留软可访问的对象。因此,如果您希望它持续存在,您应该使用 SoftReference。我想拥有控制,即第二种方式会让你高枕无忧。如果您想自己进行清理操作而不是 GC,则可以使用 PhantomReference 来确保进度。它们在入队之前不会被垃圾收集器自动清除。

于 2012-11-30T08:16:17.720 回答
0

从 ReferenceQueue 中删除它们之后,对象可以被终结,并且在它们被终结之后,它们可以在下一次 GC 中被删除。

于 2012-10-22T10:18:19.660 回答