class Beta { }
class Alpha {
static Beta b1 ;
Beta b2;
}
public class Tester {
public static void main(String[] args) {
Beta b1 = new Beta();
Beta b2 = new Beta();
Alpha a1 = new Alpha();
Alpha a2 = new Alpha();
a1.b1 = b1 ;
a1.b2 = b1 ;
a2.b2 = b2 ;
a1 = null ;
b1 = null;
b2 = null;
System.out.println(" Line 1 " + " a1 " + a1.b1);
System.out.println(" Line 2 " + " a1 " + a1.b2);
System.out.println(" Line 3 " + " a2 " + a2.b2);
System.out.println(" Line 4 " + " a1 " + a2.b1);
System.out.println(" Line 5 " + " b1 " + b1);
System.out.println(" Line 6 " + " b1 " + b2);
}
}
我不确定为什么上述程序中只有 a1 对象可用于垃圾收集。我期待垃圾收集器收集 a1 、 b1 和 b2 。
正如您所看到的 a1 , b1 和 b2 被设为 NULL 因此这使得对象可用于垃圾收集。如果对象为 NULL 或任何线程或引用变量都无法访问,则它应该由垃圾收集器收集。
有人可以通过很好的例子和更精确的方式帮助我理解上述程序的微妙之处吗?感谢您的帮助。