2011-05-23 127 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