方法区域和PermGen

时间:2012-02-01 12:24:14

标签: java memory-management jvm jvm-hotspot permgen

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

那么我可以断定这两个存储区是相同吗?

4 个答案:

答案 0 :(得分:16)

您应该查看Java Memory Types,并可选择在此文档中查看Java中的Garbage Collection。后者非常冗长,都很有用。

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

  

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

答案 1 :(得分:5)

您可以将“方法区域”视为“PermGen”的子集,因为永久生成空间确实包含类定义,但它也保存了固定的字符串和其他不可能被丢弃的数据位,

答案 2 :(得分:3)

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

答案 3 :(得分:1)

http://www.pointsoftware.ch/en/under-the-hood-runtime-data-areas-javas-memory-model/提供了一个非常好的主意,我在其他地方找不到。

大多数人都把Heap和Stack称为等价物,并且作为主要组成部分,但是Tai用精美的图像给出了完美的图片说明。