jvm的永久代

记得曾经在课本上看到了永久代的概念,但是没有看过在哪里会有用到,最近准备面试,想深入的了解永久代到底是什么

jvm的语言规范里面定义了方法区(为了区分叫做“非堆”)的概念,方法区主要用于存储类的信息、常量池、方法数据、方法代码等信息。但是不同的虚拟机有不同的实现,其中hotspot实现通过永久代来实现了方法区。

在java代码中如果在一个while循环里面不停的创造对象的话就会发生永久代溢出。

在java8中完全移除了永久代概念,使用元空间来代替,元空间不在虚拟机中,而是使用的本地内存。

为什么需要将永久代替换成元空间?(工程上方案的改进都是在修补前面的漏洞,都不是刚开始就有一个顶级的设计)

永久代gc代价大、oracle将来会合并hotspot和jrockit

参考:http://www.cnblogs.com/paddix/p/5309550.html

 

你可能感兴趣的:(java虚拟机)