java虚拟机之回收方法区

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java虚拟机之回收方法区相关的知识,希望对你有一定的参考价值。

在java虚拟机中并没有规范规定需要对方法区即是新生代进行垃圾回收,
主要是这些区域的回收性价比极低,
一般在新生代中一般垃圾回收中可以达到70%到95%。
 
其中永久代中的垃圾回收主要回收的是两个部分,
一个部分是废弃的常量,判断一个常量是否废弃,
主要看这个常量在其他地方是否引用了这个字面量。
否则如果此时发生垃圾回收,即会回收这部分常量。
 
另外一部分是无用的类,判断一个类是否无用,主要看三点,
第一点是这个类的所有实例都被回收了,即是java堆中不存在该类的任何实例,
第二点是加载该类的classloader已经被回收,
第三点是该类对应的java.lang.class对象没有在任何地方被引用,无法在任何地方通过反射访问该类。
 
在大量使用类反射,动态代理,CGlib等bytecode框架的使用场景中,
以及动态生成jsp这类频繁调用classloader的场景都需要虚拟机具备类卸载的功能,否则会导致永久代泄漏。

以上是关于java虚拟机之回收方法区的主要内容,如果未能解决你的问题,请参考以下文章

java虚拟机之垃圾回收

深入JAVA虚拟机之垃圾收集

java虚拟机之内存分配

java虚拟机之垃圾收集器与内存分配策略

Java虚拟机之JVM系统和内存模型

Java虚拟机之栈