类的卸载

66 阅读1分钟

类的卸载

和类的卸载相关的对象主要分为以下几个分别是,在方法区中的类模板对象、在堆空间中的.class对象、在堆空间中对象的类的实例对象、在堆空间中的类加载器对象以及在栈空间中的引用指针。对于类加载器,类的.class对象会指向类的加载器例如

ActiveUse.class.getClassLoader()

同时,类的加载器也会指向.class对象,毕竟类的加载器要知道他到底加载了哪些类,因此这是个双向指向关系。类的实例变量也会指向.class对象

new ActiveUse().getClass()


因此,如果要完成类的卸载(消除方法区中的类模板对象),要把类加载器、类的实例对象、.class对象全部去除指向关系 总结下来,如果类要被回收需要满足以下条件: - 所有的类实例被回收 - 指向.class类的引用被回收 - 类的加载器被回收 比较难,其实类被回收的条件,可以看成GCRoot如何才能被回收。不能被任何对象引用。