垃圾收集Java类

时间:2012-07-18 15:49:01

标签: java garbage-collection

在下面的代码中,垃圾收集器是否可以销毁对象矩形?

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

我认为点和矩形都被垃圾收集器破坏是合理的,因为矩形引用指向无效。

4 个答案:

答案 0 :(得分:1)

如果从任何活动线程或任何静态引用无法访问对象,则该对象符合垃圾收集或GC的条件 - 如果对象的所有引用均为空,则可以说该对象符合垃圾收集条件。另外,阅读参考类型(强,弱,软和幻像)。

答案 1 :(得分:1)

无法收集任何对象,因为rectangle引用了Rectangle并且它引用了Point对象。事实point不再是指任何事情都无关紧要。

答案 2 :(得分:0)

取决于Rectangle的构造函数。它可以存储对点对象的引用或复制其值。

在第一种情况下,两个对象都不会被GCed。在第二种情况下,只有Point将被GC。

答案 3 :(得分: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

将点引用设置为null与此无关。如果没有其他参考,GC将识别“循环”引用并收集这两个对象。如果存储了它的副本,将点变量设置为null 不会使矩形内的点无效! point = null;将该指针的值设置为null,它不会更改它用于指向的对象!