【发布时间】:2016-12-27 09:39:51
【问题描述】:
我有点困惑,在第 18 行时找出有多少对象符合 GC 条件。请解释一下
class B{}
class A{
static B b1;
B b2;
}
public class Test {
public static void main(String[] args) {
B b1=new B();
B b2=new B();
A a1=new A();
A a2=new A();
a1.b1=b1;
a1.b2=b1;
a2.b2=b2;
a1=null;
b1=null;
b2=null;
// TODO Auto-generated method stub
}
}
第 19 行时有多少对象符合 GC 条件
【问题讨论】:
-
取决于哪一行是第 19 行 ;)
-
假设第 19 行是
main的最后一行(即右括号),所有对象都符合 GC 条件,因为这是程序的结尾。因为我不确切知道 JVM 加载了哪些类,所以我无法准确说出其中有多少。在a1 = null;之后,只有a1有资格进行gc。在b1 = null;之后,b1有资格获得 GC。b2在b2 = null;之后没有资格获得 GC,因为它仍然可以通过a2.b2访问。 -
参考我之前的评论:请注意,当我写“
a1获得 GC 资格”时,我实际上是指“对象,a1在设置为null之前引用,有资格获得 GC”。很难谈论这个对象,因为只要它没有被垃圾收集,它就存在且无名。我希望预期的意思很清楚。 -
在您告诉我们哪一行是第 19 行之前,这个问题是无法回答的。
标签: java object garbage-collection