java - Java 的 LinkedList 中的 clear() impl

标签 java linked-list

我担心这是一个非常愚蠢的问题,但这里是:

为什么 Java 的默认 LinkedList 实现中的 clear 方法费心遍历列表并解开所有节点?为什么不直接取消标题并保持列表的其余部分连接——GC 无论如何都会得到它,不是吗?

方法如下:

/**
 * Removes all of the elements from this list.
 */
public void clear() {
    Entry<E> e = header.next;
    while (e != header) {
        Entry<E> next = e.next;
        e.next = e.previous = null;
        e.element = null;
        e = next;
    }
    header.next = header.previous = header;
    size = 0;
modCount++;
}

为什么要走路呢?为什么不直接跳到 header.next = header.previous = header;

据我所知,它是否有助于 GC...?此链接http://java.sun.com/docs/books/performance/1st_edition/html/JPAppGC.fm.html#997442有点暗示。

TIA...

最佳答案

他们的方法确保即使其他代码仍然持有对特定节点的引用,其他节点也会被 GC。

否则,即使是对其中一个节点的单个外部引用也会阻止收集整个链。

此外,列表中的其他操作可能会同时进行(例如通过 subList()Collections.unmodifiableList()、迭代器进行查看),这确保了这些东西立即将列表视为“空”。

关于java - Java 的 LinkedList 中的 clear() impl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/575995/

相关文章:

security - Java认证、授权服务(JAAS)

java - 如何使用 EasyMock 使 java.lang.reflect.Method.getReturnType 返回 void.class ?

java - 编辑文本 : Attempted to finish an input event but the input event receiver has already been disposed

c - 从大范围的数字中删除数字

C 将链表写入文件

c - 链接列表不会删除列表中的第二 (2) 条记录,但适用于所有其他记录

java - 在数组java中搜索一个数字

java - 有人编写过模糊日期匹配来捕获数据输入错误吗?

c - 尽管预先声明了一个数组,但C程序在存储字符串时遇到错误

c - C 中的链表段错误