不同jdk版本关于方法区的演进

67 阅读1分钟

1.jdk1.6

在这个jdk版本中永久代是方法区的具体实现。在这个版本的永久代中,方法区中包含有类信息,运行时常量池,字符串常量池。

2.jdk1.7

因为方法区的垃圾回收会非常非常非常消耗性能,而字符串常量池会不断地增大,因此导致也许会方法区的FullGC会相对频繁。因此在jdk1.7中,把字符串常量池与静态变量的引用信息放入到了堆区中。

3.jdk1.8

为了进一步提高方法区的容量,直接将方法区放入到了本机内存中。

4.方法区回收的对象

  • 无用的类
    无用类的三个条件:无实例、.class类没有被使用、类加载器没用。总之非常苛刻。
  • 废弃的常量
    这个废弃的常量指的是,.class文件的常量池加载到方法区后形成的运行时常量池的常量。这个地方较占空间。