JVM垃圾会在内存中收集孤立的周期吗?

时间:2013-09-16 03:23:16

标签: java memory-management memory-leaks jvm

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

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

1 个答案:

答案 0 :(得分:1)

虽然这在理论上依赖于JVM实现(实际上并不需要JVM来实现垃圾收集,而一些非常小的嵌入式实现并不需要),但所有现代JVM都使用了标记和扫描的变体,从你的main方法开始,然后查找(标记)可以到达的所有内容并抛出(扫除)其他所有内容。将收集无法从主程序访问的循环数据结构。