当使用带有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
}
答案 0 :(得分:1)
在您的示例中,当垃圾收集器不可用时,它将被垃圾收集器清理。另一方面,如果使用SoftReferences,只要内存足够,就可以保持可以轻松访问的对象。因此,如果您希望它持续存在,您应该使用SoftReference。我想有控制,即第二种方式会让你安心。如果您想自己而不是GC进行清理操作,为了确保进度,您可以使用PhantomReference。它们在排队之前不会被垃圾收集器自动清除。
答案 1 :(得分:0)
从ReferenceQueue中删除它们之后,可以最终确定该对象,在完成它们之后,可以在下一个GC上删除它们。