“孤立周期”可能不是我想要描述的正确术语。以下是我在代码中尝试描述的示例:
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垃圾是否可以收集内存引用?或者这是内存泄漏?
答案 0 :(得分:1)
虽然这在理论上依赖于JVM实现(实际上并不需要JVM来实现垃圾收集,而一些非常小的嵌入式实现并不需要),但所有现代JVM都使用了标记和扫描的变体,从你的main
方法开始,然后查找(标记)可以到达的所有内容并抛出(扫除)其他所有内容。将收集无法从主程序访问的循环数据结构。