方法区域和PermGen

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

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

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

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

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

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

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

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

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