“孤立循环”可能并不完全是我想要描述的正确术语。这是我试图在代码中描述的示例:
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 是否可以垃圾收集内存引用?或者这是内存泄漏?
最佳答案
虽然这在理论上取决于 JVM 实现(JVM 实际上根本不需要实现垃圾收集,并且一些非常小的嵌入式垃圾收集器不需要),但所有现代 JVM 都使用标记和清除的变体,它从您的 main
方法开始,查找(标记)所有可访问的内容,并丢弃(清除)其他所有内容。将收集主程序无法访问的循环数据结构。
关于java - JVM 会垃圾收集内存中的孤立周期吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18819970/