当前位置:  开发笔记 > 编程语言 > 正文

Java的LinkedList中的clear()impl

如何解决《Java的LinkedList中的clear()impl》经验,为你挑选了1个好方法。

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

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

这是方法:

/**
 * Removes all of the elements from this list.
 */
public void clear() {
    Entry e = header.next;
    while (e != header) {
        Entry 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 ...



1> Jason Cohen..:

他们的方法确保即使其他代码仍保留对特定节点的引用,其他节点也将被GC.

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

此外,列表中的其他操作可能同时进行(例如,通过subList()或通过Collections.unmodifiableList()迭代器查看),这可以确保那些事物立即将列表视为"空".

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有