因垃圾对象引用而导致的java垃圾回收
问题描述:
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();
}
答
不,他们在说胡话。假设在run()
之内没有任何内容在某处存储引用,那么该汽车在use_the_car
中的c2.run();
陈述之后有资格进行垃圾回收。
Java是不引用计数 - 即使循环引用都不是问题(例如其中Car
和Driver
具有彼此的基准,但没有必须或者它们的参考)。
也许你与之交谈的人正在考虑一个稍微不同的情况?
+1:在'use_the_car'返回后,任何时候只有一个对象的引用,不再有引用。 (如果在'c2.run()'之后有一个语句,那么直到引用超出作用域为止,它才会合格。 – 2011-05-23 07:07:50