假设您有引用
A -> B -> C -> D
。 当您从 A
中删除对 B
的引用时,您将得到一系列孤立的对象 B -> C -> D
。
即使没有办法访问它们(因为没有对 B
的引用),C
和 D
是否会被垃圾收集器回收?
我想像垃圾收集器会聪明地解决任何此类依赖关系。
然而,我查看了 LinkedList
类的source code,发现与此信念相反的事情。 我注意到当列表被 clear()
时,每个链接的所有引用都被显式设置为 null
,因此使其成为一个 O(n)
操作。 这样做的原因/好处是什么?
Iterator
和ListIterator
都包含对内部节点的引用。然而,SubList
却没有。 - tskuzzyLinkedList
。 - shmoselclear()
时,断开每个节点会带来一些GC好处,而不仅仅是丢弃端点。您可以在此处查看更新后的源代码:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/LinkedList.java#LinkedList.clear%28%29. - shmosel