我好像记得这样一个东西,但是时间太长远了,请教大神帮忙确认。
前提
A{
public void method(){
B.staticMethod();
}
}
B{
private static ArrayList<String> fields = new ArrayList<>();
static{
fields.add("abc");
fields.add("def");
}
public static staticMethod(){
return fields.remove(0);
}
}在程序的某段代码中,有这样语句 A a = new A(); A.method();被执行,
是不是只要这个A实例一直被引用,那么B类型将不会被虚拟机卸载,从而B中的
静态字段 ArrayList<String> fields将一直存在????
跪求大神确认。
------解决思路----------------------
虚拟机的类卸载条件:
1.该类所有实例必须已经回收
2.加载类的ClassLoader已经回收
3.该类对应的Class对象也没用在任何地方被引用