0

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

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 是否可以垃圾收集内存引用?或者这是内存泄漏?

4

1 回答 1

1

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

于 2013-09-16T03:25:09.917 回答