我试图理解HotSpot JVM的内存结构,并与两个术语“Method Area”和“PermGen”空间混淆。我提到的文档说,Method Area包含类和方法的定义,包括字节代码。其他一些文档说它们存储在PermGen空间中。
那么我可以断定这两个存储区是相同吗?
答案 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用精美的图像给出了完美的图片说明。