20

我试图了解 HotSpot JVM 的内存结构,但对“方法区域”“PermGen”空间这两个术语感到困惑。我提到的文档说方法区包含类和方法的定义,包括字节码。其他一些文档说它们存储在 PermGen 空间中。

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

4

4 回答 4

19

您应该查看Java 内存类型,并可选择查看有关 Java 中的垃圾收集的文档。后者非常冗长,两者都很有用。

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

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

于 2012-02-01T12:31:47.623 回答
6

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

于 2012-02-01T12:27:44.377 回答
4

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

于 2013-07-06T09:06:39.047 回答
3

给出了一个我在其他地方没有找到的好主意

大多数人都将堆和堆栈视为等价物,并作为主要组件,但 Tai 以精湛的图像给出了完美的解释。

编辑:链接不再有效:​​(

于 2015-03-31T15:31:17.243 回答