使用弱或软引用使用参考按时是什么何时真正从内存中删除的对象



使用 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
}

在您的示例中,垃圾收集器将在垃圾中清洁。另一方面,如果您使用softreferences,只要有足够的内存,就可以保留可轻松的对象。因此,如果您希望它持续存在,则应使用Softreference。我想拥有控制权,即第二种方式会让您安心。如果您想自己进行清理操作而不是GC,以确保进度可以使用幻影。垃圾收集器不会自动清除它们,然后才能被征用。

在您从参考等级中删除它们后,可以最终确定对象,并且可以在下一个GC上删除它们。

最新更新