当对象真正从内存中删除时,使用带引用问题的弱引用或软引用时?

时间:2012-10-22 09:50:21

标签: java weak-references soft-references

当使用带有ReferenceQueue的弱引用或软引用时,对象是否真的从内存中删除了?我是否必须致电referancequeue.removereferancequeue.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

}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

从ReferenceQueue中删除它们之后,可以最终确定该对象,在完成它们之后,可以在下一个GC上删除它们。