加入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十万遍. 则上面的这种情况垃圾回收就没法进行了. 现实中虽然我们有意识的不会写出这种情况. 但是在大环境下, 难保证你写的类,别人写的类, 系统类库相互交织在一起.
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十万遍.
则上面的这种情况垃圾回收就没法进行了.
现实中虽然我们有意识的不会写出这种情况.
但是在大环境下, 难保证你写的类,别人写的类, 系统类库相互交织在一起.
我不是这个意思,书上面说有种“引用计数”(java没有用这种机制)。
我想知道他里面的“对象应该被回收,但计数器不为零”发生在什么情况下!
也可以这么说,这是一个关于操作系统的问题。