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被垃圾收集器收集。在java中的垃圾收集示例?
正如您所見,a1,b1和b2被設爲NULL,因此這使得對象可用於垃圾收集。如果任何線程或引用變量對象爲NULL或無法訪問,則應由垃圾收集器收集。
有人能幫助我更好地瞭解上述計劃的細微之處嗎?感謝您的幫助。
您不能在Java中「創建對象爲空」。不過,您可以將_reference_對象刪除。無論如何,除非使用弱引用或類似方法,否則不能真正「觀察」Java中的垃圾回收。 – 2012-08-01 14:32:59
你是怎麼知道b1和b2不是垃圾收集的? – Byter 2012-08-01 14:37:36