在看到垃圾回收的时候,书上说到了一种“引用计数”的回收方式,然后提到“这个方法有个缺陷,如果对象之间存在循环引用,可能会出现‘对象应该被回收,但计数器不为零’”,想问一下这种情况具体是什么样子的?

解决方案 »

  1.   

    加入A,B,C三对象, A中有field是B类型, B中有field是C类型, C中有field是A类型, 
    class A:
    public class A {
    B b;
    }Class B:
    public class B {
     C c;
    }Class C:
    public class C {
    A a;
    }public class Test{
    public static void main(String[] args){
    A a = new A();
    B b = new B();
    C c = new C();
    a.b = b;
    b.c = c;
    c.a = a;
                    //做其他事情,但都与a, b, c无关.
    }
    }你把上面的test new十万遍.
    则上面的这种情况垃圾回收就没法进行了.
    现实中虽然我们有意识的不会写出这种情况.
    但是在大环境下, 难保证你写的类,别人写的类, 系统类库相互交织在一起.
      

  2.   


    我不是这个意思,书上面说有种“引用计数”(java没有用这种机制)。
    我想知道他里面的“对象应该被回收,但计数器不为零”发生在什么情况下!
    也可以这么说,这是一个关于操作系统的问题。
      

  3.   

    哈,是一个JAVA平台的问题,哈~