0

我使用 RefQueue 来跟踪哪些 WeakRef 不再指向对象。但我想知道它是如何工作的。当我告诉 WeakReference 在特定队列中注册它自己,然后过了一段时间我这样做:

private void removeDumpReferences() {
    Reference<? extends E> ref = null;

    while ((ref = garbageQueue.poll()) != null) {
        list.remove(ref);
    }
}

它是否贯穿所有已注册的引用(测试 ref 是否指向 null),或者实际上有太多队列用于注册的,而第二个用于 GC 认为“未使用”的那些?或者也许它的工作方式非常不同?

4

1 回答 1

0

只有在被引用的对象被 GC'd 之后,引用才会在引用队列中排队。

于 2013-03-26T16:31:49.500 回答