方法区什么时候触发回收垃圾
根据Java虚拟机规范的规定,方法区无法满足内存分配需求时,也会抛出OutOfMemoryError异常,虽然规范规定虚拟机可以不实现垃圾收集,因为和堆的垃圾回收效率相比,方法区的回收效率实在太低,但是此部分内存区域也是可以被回收的。 方法区的垃圾回收主要有两种,分别是对废弃常量的回收和对无用类的回收。 当一个常量对象不再任何地方被引用的时候,则被标记为废弃常量,这个常量可以被回收。 方法区中的类需要同时满足以下三个条件才能被标记为无用的类: 1.Java堆中不存在该类的任何实例对象; 2.加载该类的类加载器已经被回收; 3.该类对应的java.lang.Class对象不在任何地方被引用,且无法在任何地方通过反射访问该类的方法。 当满足上述三个条件的类才可以被回收,但是并不是一定会被回收,需要参数进行控制,例如HotSpot虚拟机提供了-Xnoclassgc参数进行控制是否回收。

浙公网安备 33010602011771号