我使用 RefQueue 来跟踪哪些 WeakRef 不再指向对象。但我想知道它是如何工作的。当我告诉 WeakReference 在特定队列中注册它自己,然后过了一段时间我这样做:
private void removeDumpReferences() {
Reference<? extends E> ref = null;
while ((ref = garbageQueue.poll()) != null) {
list.remove(ref);
}
}
它是否贯穿所有已注册的引用(测试 ref 是否指向 null),或者实际上有太多队列用于注册的,而第二个用于 GC 认为“未使用”的那些?或者也许它的工作方式非常不同?