我使用RefQueue来跟踪哪些WeakRef不再指向对象。但我想知道它是如何运作的。当我告诉WeakReference在特定队列中自己注册时,然后经过一段时间我做:
private void removeDumpReferences() {
Reference<? extends E> ref = null;
while ((ref = garbageQueue.poll()) != null) {
list.remove(ref);
}
}
它是否运行所有已注册的引用(测试ref是否为null),或者实际上有一个队列用于已注册的一个,第二个用于那些GC被认为“不在使用”的队列?或者它的工作方式可能非常不同?
答案 0 :(得分:0)
只有在引用的对象获得GC后,引用才会在引用队列中排队。