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;
}

解决方案 »

  1.   

    会的,只要jvm检查到该对象不在被使用,就会回收
      

  2.   

    关键是为什么,,GC判断对象是否有效不是根据引用是否被其他对象持有吗?
    看一下可达性分析算法,写个程序打印一下GC日志就知道了。
      

  3.   

    首先,
    a = null;
            b = null;
    这两行代码虽然各自置空引用,只是把栈内存指向堆内存的地址置空了。但是两个对象互相引用的事实并未改变,而java为什么能回收这种对象是因为java采用的是可达性分析算法进行内存回收。而该java使用该算法的目的就是针对这种循环引用的情况。