2012-07-18 106 views
0

在下面的代码中,对象矩形可能被垃圾回收器销毁吗?垃圾回收Java类

... 
Point point = new Point(2,4); 
Rectangle rectangle = new Rectangle (point, 20, 20); 
point = null; 
... 

我认为这是合理的,这两个点和矩形被垃圾收集器,因为矩形参考点,这是无效被破坏。

+0

问得好+1 – Pooya 2012-07-18 15:50:42

+1

如果rentangle仍在使用,要收集什么! – 2012-07-18 15:51:36

+0

'Rectangle'实例**不会引用'point' - 它引用的是在您实例化'Rectangle'的行处引用'point'的对象。变量'point'是通过值传递的,所以无论你对var做什么事情都不会对'Rectangle'实例产生任何影响。 – 2012-07-18 16:35:33

回答

1

一个物体变得符合垃圾收集或GC如果它不是来自任何活动线程或任何静态refrences可达 - 你可以说,如果所有的引用都是空的对象符合垃圾收集。此外,请阅读参考类型(强,弱,软&幻影)。

+0

因此,在point = null之后,对象点仍然有一个引用,所以不会收集任何东西。 – 2012-07-18 16:25:02

1

无论对象可以被收集,因为rectangle指矩形和它引用的Point对象。事实上不再指任何事情都没有关系。

0

要看什么矩形的构造函数。它可以存储对点对象的引用或复制其值。

在第一种情况下,无论对象将是GCed。在第二种情况下,只有点将被GCed。

0

你没有给很够一个例子说。一旦它们超出范围,它们都将有资格获得GC,这是包括声明在内的最接近的一系列大括号。

假设矩形的类型Point的领域内,它存储你通过它的点:

{ 
Point point = new Point(2,4); 
Rectangle rectangle = new Rectangle (point, 20, 20); 
point = null; 
//No GC yet! 
} 
//Now they can be GC'd 

设置点参考空无关这个真的。如果没有其他参考文献,GC将识别“通告”参考并收集两个对象。将你的点变量设置为空不会如果存储了它的副本,则无效矩形内的点! point = null;将该指针的值设置为null,但它不会更改它用于指向的对象!