使用 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
}
在您的示例中,垃圾收集器将在垃圾中清洁。另一方面,如果您使用softreferences,只要有足够的内存,就可以保留可轻松的对象。因此,如果您希望它持续存在,则应使用Softreference。我想拥有控制权,即第二种方式会让您安心。如果您想自己进行清理操作而不是GC,以确保进度可以使用幻影。垃圾收集器不会自动清除它们,然后才能被征用。
在您从参考等级中删除它们后,可以最终确定对象,并且可以在下一个GC上删除它们。