我试图了解 HotSpot JVM 的内存结构,但对“方法区域”和“PermGen”空间这两个术语感到困惑。我提到的文档说方法区包含类和方法的定义,包括字节码。其他一些文档说它们存储在 PermGen 空间中。
那么我可以断定这两个内存区域是相同的吗?
我试图了解 HotSpot JVM 的内存结构,但对“方法区域”和“PermGen”空间这两个术语感到困惑。我提到的文档说方法区包含类和方法的定义,包括字节码。其他一些文档说它们存储在 PermGen 空间中。
那么我可以断定这两个内存区域是相同的吗?
您应该查看Java 内存类型,并可选择查看有关 Java 中的垃圾收集的文档。后者非常冗长,两者都很有用。
实际上 Method 区域是 Permanent Generation 的一部分:
与终身代密切相关的第三代是永久代。永久代是特殊的,因为它保存了虚拟机所需的数据来描述在 Java 语言级别上没有等价物的对象。例如,描述类和方法的对象存储在永久代中。
您可以将“方法区域”视为“PermGen”的子集,因为永久代空间确实包含类定义,但它也包含内部字符串和其他不太可能被丢弃的数据位,
方法区基本上是一个非堆空间,如堆栈,它保持类骨架。骨架包括带有值的静态变量、构造函数等。反射操作是在这个内存区域上操作的。Perm 是一个与堆并行的内存空间,用于保存当前执行类的二进制代码。