在下面的代码中,对象矩形可能被垃圾回收器销毁吗?垃圾回收Java类
...
Point point = new Point(2,4);
Rectangle rectangle = new Rectangle (point, 20, 20);
point = null;
...
我认为这是合理的,这两个点和矩形被垃圾收集器,因为矩形参考点,这是无效被破坏。
在下面的代码中,对象矩形可能被垃圾回收器销毁吗?垃圾回收Java类
...
Point point = new Point(2,4);
Rectangle rectangle = new Rectangle (point, 20, 20);
point = null;
...
我认为这是合理的,这两个点和矩形被垃圾收集器,因为矩形参考点,这是无效被破坏。
一个物体变得符合垃圾收集或GC如果它不是来自任何活动线程或任何静态refrences可达 - 你可以说,如果所有的引用都是空的对象符合垃圾收集。此外,请阅读参考类型(强,弱,软&幻影)。
因此,在point = null之后,对象点仍然有一个引用,所以不会收集任何东西。 – 2012-07-18 16:25:02
无论对象可以被收集,因为rectangle
指矩形和它引用的Point对象。事实上不再指任何事情都没有关系。
要看什么矩形的构造函数。它可以存储对点对象的引用或复制其值。
在第一种情况下,无论对象将是GCed。在第二种情况下,只有点将被GCed。
你没有给很够一个例子说。一旦它们超出范围,它们都将有资格获得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,但它不会更改它用于指向的对象!
问得好+1 – Pooya 2012-07-18 15:50:42
如果rentangle仍在使用,要收集什么! – 2012-07-18 15:51:36
'Rectangle'实例**不会引用'point' - 它引用的是在您实例化'Rectangle'的行处引用'point'的对象。变量'point'是通过值传递的,所以无论你对var做什么事情都不会对'Rectangle'实例产生任何影响。 – 2012-07-18 16:35:33