1.jdk1.6
在这个jdk版本中永久代是方法区的具体实现。在这个版本的永久代中,方法区中包含有类信息,运行时常量池,字符串常量池。
2.jdk1.7
因为方法区的垃圾回收会非常非常非常消耗性能,而字符串常量池会不断地增大,因此导致也许会方法区的FullGC会相对频繁。因此在jdk1.7中,把字符串常量池与静态变量的引用信息放入到了堆区中。
3.jdk1.8
为了进一步提高方法区的容量,直接将方法区放入到了本机内存中。
4.方法区回收的对象
- 无用的类
无用类的三个条件:无实例、.class类没有被使用、类加载器没用。总之非常苛刻。 - 废弃的常量
这个废弃的常量指的是,.class文件的常量池加载到方法区后形成的运行时常量池的常量。这个地方较占空间。