记得曾经在课本上看到了永久代的概念,但是没有看过在哪里会有用到,最近准备面试,想深入的了解永久代到底是什么
jvm的语言规范里面定义了方法区(为了区分叫做“非堆”)的概念,方法区主要用于存储类的信息、常量池、方法数据、方法代码等信息。但是不同的虚拟机有不同的实现,其中hotspot实现通过永久代来实现了方法区。
在java代码中如果在一个while循环里面不停的创造对象的话就会发生永久代溢出。
在java8中完全移除了永久代概念,使用元空间来代替,元空间不在虚拟机中,而是使用的本地内存。
为什么需要将永久代替换成元空间?(工程上方案的改进都是在修补前面的漏洞,都不是刚开始就有一个顶级的设计)
永久代gc代价大、oracle将来会合并hotspot和jrockit
参考:http://www.cnblogs.com/paddix/p/5309550.html