62,614
社区成员
发帖
与我相关
我的任务
分享
public class TestCase2 {
public static void main(String[] args) {
A a = new A();
B b = new B();
a.b = b;
b.a = a;
a = null;
b = null;
}
}
class A{
B b;
}
class B{
A a;
}
a = null;
b = null;
这两行代码虽然各自置空引用,只是把栈内存指向堆内存的地址置空了。但是两个对象互相引用的事实并未改变,而java为什么能回收这种对象是因为java采用的是可达性分析算法进行内存回收。而该java使用该算法的目的就是针对这种循环引用的情况。