【问题标题】:Will the garbage collector collect a leaf of a tree that is not accessible anymore but still points to the tree垃圾收集器是否会收集不再可访问但仍指向树的树的叶子
【发布时间】:2013-01-22 01:23:28
【问题描述】:

在这种情况下会发生什么?即使它仍然有对树的引用,它会被收集吗?

class BinarySearchTree {
    TreeNode root;
    /* constructor  including assigning the root*/
    /* other methods of the tree */
    public void example() {
        root = null; /* assume the root already has children */
                         /* we haven't set the parent of the child of the root*/
                          /*to null*/
    }
}

class TreeNode {
    private TreeNode left;
    private TreeNode right;
    private TreeNode parent;

    /* set and get methods */
}

【问题讨论】:

  • 垃圾收集器检测到循环引用。在这种情况下,如果在树之外引用了任何节点,则整个树仍将在范围内。如果在树之外没有引用任何节点,则树将超出范围。
  • @BevynQ - 实际上,GC 检测循环引用。如果一个对象不可访问,则无论可能的循环引用如何,它都是不可访问的。 GC 工作基于可达性,而不是引用计数。
  • @HotLicks 这当然取决于 Java 的实现,尽管我认为它确实适用于 Oracle 当前的 SE 版本。
  • @owlstead - 我见过的每个 Sun/Oracle 版本以及 IBM 版本都是如此。有一些实验版本在一定程度上使用了引用计数等,但我不相信任何版本都成为“主流”。而且我认为纯粹的引用计数实现不会满足 Java 标准——至少必须偶尔运行可达性扫描。

标签: java tree garbage-collection binary-search-tree


【解决方案1】:

垃圾收集器从“根”开始。这些将是由 JVM 锚定的几个表以及所有线程的所有堆栈帧中的所有引用。每个“根”引用都被“跟踪”到它所寻址的任何对象,并且该对象被添加到可访问但未跟踪的对象列表中。

在跟踪根之后,一次检查一个可访问但未跟踪的对象列表,然后将这些对象中的引用“跟踪”到其他对象,然后将这些对象添加到列表中。

对象一旦被跟踪就会从列表中删除。跟随引用时到达的对象,并且结果已经被触摸的对象不会被添加到列表中。

最终,可访问但未跟踪的对象列表变为空,此时“标记”阶段完成。然后是“扫描”阶段——扫描所有对象,并丢弃任何未到达的对象。

当然,这是一个过度简化的 GC 版本,但它几乎涵盖了所有内容。如上所述无法“到达”的对象将被“收集”并将其空间返回到可用空间池。

【讨论】:

    【解决方案2】:

    垃圾收集器将收集任何无法访问的对象。 IOW,没有任何迹象表明它。它指向自己的内容无关紧要。

    【讨论】:

      【解决方案3】:

      将被删除 垃圾收集器收集所有没有引用它的对象,这意味着你根本无法访问它

      【讨论】:

        【解决方案4】:

        没有看到您实际上是如何填充树的,答案是“视情况而定”。作为一般规则,如果将来无法访问该变量,则将其称为对象,并且 gc 会处理它。但是,如果您的树设置为您以后可以引用子节点(例如,如果它们有实际的变量名),那么 gc 将无济于事。

        【讨论】:

        • 毫无意义。这取决于对象是否可达。时期。如果它现在不可达,它就不能神奇地在未来变得可达。对象被引用或未被引用。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-21
        • 2012-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-25
        • 1970-01-01
        相关资源
        最近更新 更多