【问题标题】:Linked List Implementation In Java and Garbage CollectionJava中的链表实现和垃圾回收
【发布时间】:2011-01-22 16:29:30
【问题描述】:

如果我有一个链表结构,并且我实现 clear() 方法如下:

public void clear() {
    firstNode = null;
    size = 0;
}

它仍然会被正确地垃圾收集,还是我想遍历每个节点,将 nextNode 设置为 null?

没有一个节点可以直接从链表外部引用,因此在我的类之外不会有对任何节点的引用,但我不确定 Java 是否会正确地垃圾收集剩余的链节点.

【问题讨论】:

  • 这正是引用计数[C++自动/智能指针等]的问题,但不是GC。

标签: java data-structures reference garbage-collection linked-list


【解决方案1】:

因为列表中的所有节点都没有外部引用。将firstNode 设置为null 将使所有节点都符合GC 的条件,因为无法从外部引用访问任何节点。

【讨论】:

  • +1 用于澄清 GC 不计算引用,它决定可达性。
【解决方案2】:

供您参考,Sun 的 LinkedList 实现会解析列表的所有元素并将它们设置为 null

【讨论】:

  • 是的,但这只是必要的,因为 Java 的 LinkedList 是双向链接的
【解决方案3】:

应该没问题 - Java 可以毫无问题地处理循环引用等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多