JVM方法区回收方法

1、方法区

        JVM中的方法区,按分代算法属于持久代,所以一般也被称为持久代。

2、回收对象

    方法区主要保存类信息(构造器)、常量、静态变量等,可回收对象为:废弃常量,无用的类。

  • 回收废弃常量与JAVA对象一致,无用即删;

       以常量池中字面量的回收为例,

例如一个字符串“abc”已经进入常量池,但是无任何String对象引用常量池的此常量,也无其它引用此字面量,“abc”常量会被系统清理出常量池。

        常量池中的其他类(接口)、方法、字段的符号引用也是如此。

  • 无用的类回收有以下条件:

        ①JAVA实例已经全部被回收,在堆中没有该类的示例存在;

        ②该类的classLoader被回收;

        ③该类的java.long.class对象没有被引用,不会被其他方法通过反射访问该类的方法

        与堆中的对象回收机制不同,不是不用即回收。HotSpot虚拟机提供了-Xnoclassgc参数进行控制是否回收。

3、应用场景

在大量使用反射、动态代理、CGLib等ByteCode框架、动态生成JSP以及OSGi这类频繁自定义ClassLoader的场景都需要虚拟机具备类卸载功能,以保证方法区不会溢出。

猜你喜欢

转载自blog.csdn.net/u011861874/article/details/81482540
今日推荐