HotSpot Java虚拟机中的“方法区”“持久代”“元数据区”的关系?

Posted horizon~~~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HotSpot Java虚拟机中的“方法区”“持久代”“元数据区”的关系?相关的知识,希望对你有一定的参考价值。

Sun/Oracle JDK的HotSpot VM中,直到JDK7都有“持久代”(Permanent Generation,简称PermGen)。也称为方法区。
Oracle JDK8的HotSpot VM去掉“持久代”,以“元数据区”(Metaspace)替代之。

Oracle是在JDK7的时候宣布移除PermGen内存区域,但是知道JDK8才最终移除。

在JDK7之前,所谓的Permanet Generation内存区域其实包含了两个部分:
  1. 方法区
  2. Internded String

方法区主要存储了class的一些信息,包括运行时常量池、Classloader的引用,字段数据,方法数据等等。
Interned String内存区域是在JDK 7的时候从JVM内存区域里面移除的。
这里有一篇关于移除PermGen内存区域的说明,有兴趣可以看下:
html

JDK8引入了一个新的native的内存区块,Metaspace(也就是题主所说的“元数据”区域)。也就是说,之后你在调优或者调查JVM问题的时候就不用和PermGen区域打交道了,也不会有java.lang.OutOfMemoryError: PermGen 这种内存不足的问题来骚扰你。



作者:Tony Tang
链接:https://www.zhihu.com/question/27429881/answer/36600315
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

以上是关于HotSpot Java虚拟机中的“方法区”“持久代”“元数据区”的关系?的主要内容,如果未能解决你的问题,请参考以下文章

HotSpot虚拟机中的对象

java一些面试题

GC回收方法区

JVM:Hotspot虚拟机中的对象

JVM

理解Java虚拟机中的栈堆堆栈