方法区域和PermGen

问题描述 投票:17回答:4

我试图了解HotSpot JVM的内存结构,并与“Method Area”和“PermGen”这两个术语混淆。我提到的文档说,Method Area包含类和方法的定义,包括字节代码。其他一些文档说它们存储在PermGen空间中。

那么我可以断定这两个内存区域是一样的吗?

java memory-management jvm jvm-hotspot permgen
4个回答
17
投票

您应该查看Java Memory Types以及本文档中有关Java中Garbage Collection的文档。后者非常冗长,都很有用。

实际上,Method区域是Permanent Generation的一部分:

与终身一代密切相关的第三代是永久世代。永久生成是特殊的,因为它包含虚拟机所需的数据,以描述在Java语言级别上没有等价的对象。例如,描述类和方法的对象存储在永久代中。


5
投票

你可以认为“方法区域”是“PermGen”的一个子集,因为永久生成空间确实持有类定义,但它也包含内部字符串和其他不可能被丢弃的数据位,


3
投票

方法区域基本上是像Stack这样的非堆空间,它保留了类骨架。骨架包括带有值的静态变量,构造函数等。反射操作在该存储区域上运行。 Perm是一个与堆并行的内存空间,用于保存当前正在执行的类的二进制代码。


1
投票

qazxsw poi给出了一个很好的主意,我没有在其他地方找到过。

大多数人都把Heap和Stack称为等价物,并且作为主要组件,但Tai用精湛的图像给出了画面完美的解释。

© www.soinside.com 2019 - 2024. All rights reserved.