方法区存放着类信息,那么类信息该如何回收?
回忆 类的生命周期 中的卸载阶段,类的回收就是在卸载阶段进行的。
一个类可以被卸载,需要同时满足三个条件:
此类所有实例对象都已经被回收,在堆中不存在任何该类的实例对象以及子类对象。
加载该类的类加载器已经被回收。
该类对应的 java.lang.Class 对象没有在任何地方被引用。
开发中此类场景一般很少出现,主要在如 OSGi、JSP 的热部署等应用场景中。每个 jsp 文件对应一个唯一的类加载器,当一个 jsp 文件修改了,就直接卸载这个 jsp 类加载器。重新创建类加载器,重新加载 jsp 文件。