JDK 7 JVM 中的 permgen 在哪里?

Where is permgen located in JDK 7 JVM?

我正在研究 JDK 7 个 JVM 运行时数据区。

我想比较 JDK 7 JVMJDK 8 JVMJDK 7 JVM中有一些内存区,但我很困惑。

我正在寻找JDK 7 JVM Runtime Data Areas Architecture图片和博客中的文章,但所有文章说的都不一样。

  1. 堆(包括新生代,老年代)
  2. 方法区(位于JVM的什么位置?堆?非堆?本地内存?还是独立的?)
  3. 方法区运行时常量池
  4. 本机内存中的 JVM 堆栈
  5. 本机内存中的本机方法堆栈
  6. 本机内存中的 PC 寄存器

但我对 PermGen 在运行时数据区中的位置感到困惑。

有人告诉 PermGen 是方法区的一部分

有人告诉 Method Area 是 PermGen 的一部分

有人告诉 PermGen 是非堆 。 (那么PermGen位于Native Memory?那么Runtime Data Areas分为3个部分?(Heap, non-Heap(Method Area), Native Memory ))

有人说PermGen是Heap的一部分

什么是正确的?

如果简单区分Heap和Native内存,PermGen是Heap区域的一部分。方法区也是。

你所附的图片在这方面基本上是正确的。

在Hotspot-VM永久代(PermGen)is/was堆区之一

不过,它是一个与主内存堆分开的特殊堆space。 它不受 Java 选项(如 -Xmx 或 -Xms)的影响,并且有自己的限制和垃圾收集行为。因此,根据观点和上下文,也可以说是non-heap。