当前位置: 代码迷 >> J2SE >> 虚拟机卸载类型的有关问题
  详细解决方案

虚拟机卸载类型的有关问题

热度:59   发布时间:2016-04-23 20:01:54.0
虚拟机卸载类型的问题
我好像记得这样一个东西,但是时间太长远了,请教大神帮忙确认。

前提
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对象也没用在任何地方被引用
  相关解决方案