在第18行找出有多少对象符合GC条件时,我有点困惑.Plz解释
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条件答案 0 :(得分:1)
假设第19行是由TODO Auto-generated method stub
标记的行,那么在程序创建的对象中,第19行唯一符合条件 GC的对象是由变量a1。
最初分配给a2的对象仍然已分配,因此无法使用。
A.b1中的静态值仍然分配给最初分配给b1的对象,因此该对象不适用于GC - 静态值在类的生命周期中存活,因此即使实例a1可能获得GC&#39 ; d仍然可以引用通过它分配的静态实例。
由于仍然分配了实例a2,因此实例字段a2.b2也不可用于GC。该值保存主方法中最初分配给局部变量b2的B实例。
在main方法中创建的四个对象中,程序最后一行实际可用于GC的唯一对象是最初分配给a1的对象。它的唯一引用已设置为null,因此实例不再可访问。所有其他实例都可以通过局部变量(a2),静态引用(A.b1)或实例引用(a2.b2)访问。
答案 1 :(得分:1)