美文网首页
回收方法区

回收方法区

作者: T_log | 来源:发表于2018-07-19 16:09 被阅读14次

方法区其实也是需要被回收的,并不是说虚拟机永久代中不需要垃圾收集。而是方法区中的垃圾收集的效率很低,新生代中一次垃圾收集可以回收70%-95%的空间,而永久代中的下效率要远远低于此。
方法区中的回收主要包括两部分内容:废弃的常量和无用的类

  1. 废弃的常量主要包括两大类 字面量和符号引用

字面量比较接近Java语言中的常量概念。回收废弃的常量和回收Java堆中的对象类似,如:要回收字符串“s”,当系统中没有任何String类型的对象引用常量池中的"s"时,也没有其他地方引用这个字面量,如果发生内存回收,而且有必要的话,则会将该字符串清理出常量池中。其中包括文本字符串、被声明为final的常量值等
而符号引用属于编译方面的概念。常量池中的其他类、接口、方法、字段的符号引用也与此类似,包括

  1. 类和接口的全限定名
  2. 字段的名称和描述符
  3. 方法的名称和描述符

2.无用的类: 要判断一个无用的类的条件非常的苛刻,需要满足:

  1. 该类的所有实例都被回收,即:Java堆中不存在该类的任何实例
  2. 该类的Classloader已经被回收
  3. 该类对用的java.lang.Class对象没有任何地方被引用,无法在任何地方通过反射访问到该类的方法。
    当满足以上三个条件时,也未必说是一定要被回收。也仅仅是可以。

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

参考
周志明《深入理解Java虚拟机》
https://blog.csdn.net/u010571316/article/details/45506567

写在最后
做一个灵魂和肉体分离的人,灵魂不受肉体的束缚,灵魂可以指挥肉体

相关文章

  • JVM-垃圾收集--标记(回收标准判定)

    垃圾收集的是哪个问题: 判断是否需要回收 回收时机 回收方法 需要垃圾收集的区域:方法区和堆区。因为栈、程序计数器...

  • HotSpot的方法区GC

    方法区也会发生垃圾回收,只是效率和性价比较低。方法区回收主要分为两部分内容: 废弃变量废弃常量的回收这与堆中对象的...

  • 回收方法区

    方法区其实也是需要被回收的,并不是说虚拟机永久代中不需要垃圾收集。而是方法区中的垃圾收集的效率很低,新生代中一次垃...

  • 垃圾收集相关知识

    垃圾收集相关知识 思维导图 回收的对象 堆,方法区(方法区虚拟机不要求实现) 如何判断一个对象可以回收 引用计数算...

  • 2018-04-10

    Java内存回收机制 在java中,内存的分配大致分为:堆,栈、方法区、本地方法区,程序计数器;本地方法区,程序计...

  • 深入理解 Java 内存回收机制

    JVM 通过 GC(Garbage Collection,垃圾回收器)来回收堆和方法区中的内存,这个过程是自动执行...

  • 垃圾收集与内存分配策略

    哪些内存需要回收 什么时候回收 如何回收 Java堆和方法区的垃圾回收 对象是否存活 引用计数算法 给对象添加一个...

  • 2.3 回收方法区

    堆的回收比较好理解,方法区同时也会被回收 回收策略: 1. 废弃常量,即该常量不再被任何String对象所引用...

  • Java内存的主要划分

    堆区 存放new出来的对象,此对象由垃圾回收器收集,垃圾回收器针对的就是堆区 栈区 每调用一个方法,会创建一个栈帧...

  • JVM内存回收机制

    垃圾回收的三件事情 1、哪些内存需要回收(堆和方法区) 2、什么时候回收 3、如何回收 在如今“自动化”的年代,再...

网友评论

      本文标题:回收方法区

      本文链接:https://www.haomeiwen.com/subject/dnmtmftx.html