我不確定我是否完全理解垃圾回收器的行爲,因此我基於previous question提出了此問題。有資格進行垃圾回收的對象數量
在這個程序:
class A {
Boolean b;
A easyMethod(A a){
return new A();
}
public static void main(String [] args){
A a1 = new A();
A a2 = new A();
A a3 = new A();
a3 = a1.easyMethod(a2);
a1 = null;
// Some other code
}
}
多少對象將是符合垃圾收集?我認爲雖然a3
永遠不會變爲空,但分配給它的第一個對象(new A()
)也應該被垃圾收集,因爲沒有引用仍指向它。我對嗎?因此,我認爲正確的答案將是2個對象。什麼是真的?
不要將您的問題置於另一個問題上,這不是討論主題。在此發佈完整的相關代碼。 –
編譯器可能會丟棄它發現的任何變量和賦值,它們在潛在的生命週期內將不會再次被讀取。因此,在代碼中分配給變量的對象在運行時不會自動引用或「可到達」,這意味着該對象可能有資格在其構造函數執行後立即進行收集。 – JimmyB