垃圾收集工作

时间:2013-02-05 15:22:27

标签: java garbage-collection

这里我对垃圾收集存在Java疑问:

protected class Robocop {
Integer weight = 200;

Robocop attent(Robocop rb) {
rb = null;
return rb;
}
public static void main(String[] args) {
System.out.println("indeed the solution is behind the corner);

Robocop rb1 = new Robocop();

Robocop rb2 = new Robocop();

Robocop rb3 = rb1.attent(rb2);

rb1 = null;

}
}

您认为有多少个对象符合GC的条件?

我对此的看法,将4个对象变为垃圾收集rb3,rb1和相关的Integer包装器实例变量。

2 个答案:

答案 0 :(得分:2)

在你的方法中你也可以返回null,因为你得到了一个引用的副本作为你的方法的参数,而不是原始的引用本身。因此,您无法修改方法内部的原始引用。您只能修改此引用所引用的对象。

在main结束时,2个对象将有资格使用GC:一个Robocop(内置一个Integer

在main完成后,JVM将关闭(在您的情况下)并且不会发生GC。

答案 1 :(得分:0)

最好使用分析器进行尝试,分析器可以在任何给定时间显示对象的确切数量。 看起来您的代码中有拼写错误。你可能意味着Robocop rb3 = rb1.attent(r2); 假设这是你的意思,rb2将有资格获得GC,然后rb1也有资格,因为它们指向null。
所以答案是2。