JVM的实现规范中要求必须实现五个部分,分别是堆、栈、PC计数器、本地方法栈和方法区。
PermGen Space和Meta Space只不过是不同版本jdk堆方法区不同的实现方案。
PermGen Space译文为永久代,是HotSpot对JVM规范中方法区的一个具体实现,存活于jdk1.7之前,主要用来存储类信息、常量、静态数据、编译后代码等。
永久代存在于JVM内存,逻辑上是属于Heap的,但是为了做区分,也称为“非堆”。
而在jdk1.8以后,Meta space取代了永久代,成为了jdk最新的方法区实现(可能以后meta space也会被取代)。
有两个比较重要的改变
1.将常量等信息从永久代中分离,转移到了Heap中
2.不再属于JVM内存,而是占用机器的本地内存
参考:
网友评论