【问题标题】:about garbage collector when deleting a node from LinkedList关于从链表中删除节点时的垃圾收集器
【发布时间】:2012-03-15 22:47:31
【问题描述】:

这是我的 LinkedList 类中删除函数的示例代码,它从中间删除一个节点。

        temp.getPrev().setNext(temp.getNext());
        temp.getNext().setPrev(temp.getPrev());
        temp.setNext(null);
        temp.setPrev(null);

我的问题是我是否必须将 temps next 和 prev 引用设置为 null 或者垃圾收集器是否会自动处理这个_?。如果你能帮助我,我将不胜感激。无论如何,谢谢。

【问题讨论】:

    标签: java garbage-collection linked-list


    【解决方案1】:

    垃圾收集器分析是否有任何对象的引用。由于在你的方法完成后没有对temp 的引用,GC 应该删除这个对象。

    【讨论】:

      【解决方案2】:

      垃圾收集器将查看何时没有留下 temp 的引用。因此,您不必关心将传出引用归零 - 如果您无法再达到 temp 它将被垃圾收集(最终)。

      【讨论】:

      • 所以垃圾收集器在第二行之后立即收集 temp.getNext().setPrev(temp.getPrev());
      • 不,您需要设置temp=null(否则您确实有对 temp - temp 本身的引用!)。此外,垃圾收集不是以确定的方式完成的。您根本无法确切知道它何时运行,只是当它运行时它将删除所有无法访问的对象。
      • 你是什么意思 temp 引用了它自己_?。你能解释一下吗?
      • 如果 temp 是方法中的局部变量,则无需将其设置为 null。退出方法后引用将消失。
      【解决方案3】:

      我认为你不应该这样做。该节点不再在任何地方被引用,因此即使它引用了有效的对象,它也会被垃圾回收。

      【讨论】:

        【解决方案4】:

        您必须确保没有对 temp 的实时引用。你不需要做任何额外的事情。

        【讨论】:

          【解决方案5】:

          GC 只考虑对对象的引用。对象是否引用其他对象无关紧要。

          【讨论】:

            猜你喜欢
            • 2023-03-26
            • 2012-11-26
            • 2013-01-26
            • 2012-01-18
            • 2020-05-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-08-05
            相关资源
            最近更新 更多