2011-05-23 118 views
0

car_object_1能垃圾回收嗎?有人認爲car_object_1有兩個參考,所以它永遠不會被收集到車庫。這是真的嗎?因垃圾對象引用而導致的java垃圾回收

Car createACar() 
{ 
    Car c = new MyCar(); //car_object_1 was created 
    return c; 
} 

void use_the_car() 
{ 
    Car c2 = createACar(); 
    c2.run(); 

} 

回答

4

不,他們在說胡話。假設在run()之內沒有任何內容在某處存儲引用,那麼該汽車在use_the_car中的c2.run();陳述之後有資格進行垃圾回收。

Java是引用計數 - 即使循環引用都不是問題(例如其中CarDriver具有彼此的基準,但沒有必須或者它們的參考)。

也許你與之交談的人正在考慮一個稍微不同的情況?

+2

+1:在'use_the_car'返回後,任何時候只有一個對象的引用,不再有引用。 (如果在'c2.run()'之後有一個語句,那麼直到引用超出作用域爲止,它纔會合格。 – 2011-05-23 07:07:50