【问题标题】:Will the JVM garbage collect orphaned cycles in memory? [duplicate]JVM 垃圾会收集内存中的孤立循环吗? [复制]
【发布时间】:2013-09-20 03:04:15
【问题描述】:

“孤立循环”可能不是我要描述的正确术语。这是我试图在代码中描述的示例:

public class Container {
    private Container otherContainer;
    public void setContainer(Container otherContainer) {
        this.otherContainer = otherContainer;
    }
}

public class Main {
    public static void main(String[] args) {
        doStuff();
    }
    public static void doStuff() {
        Container c1 = new Container();
        Container c2 = new Container();
        c1.setContainer(c2);
        c2.setContainer(c1);
        //c1 and c2 now each hold a reference to each other,
        //will they be garbage-collected once this method falls out of scope?
    }
}

给定一个包含循环的内存引用图,一旦代码无法访问循环,JVM 是否可以垃圾收集内存引用?或者这是内存泄漏?

【问题讨论】:

  • 这是由GC处理的,所以不会是内存泄漏。

标签: java memory-management memory-leaks jvm


【解决方案1】:

虽然这在理论上取决于 JVM 实现(实际上根本不需要 JVM 来实现垃圾收集,一些非常小的嵌入式系统不需要),但所有现代 JVM 都使用标记和清除的变体,它从您的 main 方法开始,并通过查找(标记)所有可以到达的东西并扔掉(扫除)其他所有东西。将收集主程序无法访问的循环数据结构。

【讨论】:

    猜你喜欢
    • 2020-11-29
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    相关资源
    最近更新 更多