當在下面顯示的類中執行i3 = null;
時,有四個對象可以垃圾回收。我添加了評論來解釋我是如何得到這個答案的。我的推理是否正確?OCPJP考試的垃圾回收模擬
public class Icelandic extends Horse{
public void makeNoise(){
System.out.println("vinny");
}
public static void main(String args[]){
/**
* 2 objects created
*/
Icelandic i1 = new Icelandic();
/**
* 2 objects created
*/
Icelandic i2 = new Icelandic();
/**
* 2 objects created
*/
Icelandic i3 = new Icelandic();
/**
* i3 is now pointing at i1, original Icelandic() referred to by i3 now
* has no reference - 2 objects now have no reference
*/
i3 = i1;
/**
* i3 is now pointing at i1, original Icelandic() referred to by i1 now
* has no reference - 2 objects now have no reference
*/
i1 = i2;
/**
* Total of six objects created, 4 objects no longer have a reference so 4
* can be garbage collected.
*
* Setting to null below doesn't make any difference to garbage collector
* as objects now do not have a reference
*/
i2 = null;
i3 = null;
}
}
interface Animal {
void makeNoise();
}
class Horse implements Animal{
Long weight = 1200L;
public void makeNoise() {
System.out.println("whinny");
}
}
我認爲在創建「冰島」時創建一個對象更合適。即使類本身是繼承的。 – 2011-11-25 16:36:38
類和對象之間有區別。當你從一個類繼承並創建一個對象時,這將只是一個對象。 –
如果你計算層次結構(我猜想它是錯誤的),你還應該包含Object,因爲每個類都會擴展它。 – mishadoff