繁体   English   中英

当对ReferenceQueue使用弱引用或软引用时,何时真正从内存中删除了该对象?

[英]When using weak or soft reference with a ReferenceQueue when is the object really removed from memory?

当对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

}

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

从ReferenceQueue中删除它们之后,可以完成该对象的处理,并且在完成处理后可以在下一个GC上将其删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM