Java 6 中的 PermGen Space 不是堆内存的一部分?

PermGen Space in Java 6 was not a part of Heap Memory?

Java6 中的 PermGen Space 不是堆内存的一部分吗? 我在阅读 java 7 中的 PermGen space 分配时遇到了这个问题。 根据 Java 7 它表示它是堆内存的一部分,这意味着没有固定的大小限制。所以方法区(PermGen)在逻辑上是堆的一部分。 这让我注意到,在 java 7.

之前,方法区不是堆的一部分

如果不是,那么 PermGen 是如何在 java 6 中分配的,在哪个内存下?

根据 this document,permgen space 在堆之外。 但那是针对 oracle jvm 的,所以我相信这取决于您使用的 jvm。

通常,Java 开发人员将分配给 JVM 的整个内存称为堆内存,因为堆是主要的 JVM 内存。但是堆内存在JVM内存中是一个独立的组。它有新的 space 和旧的 space。非堆是 JVM 中的另一组,它使用 PermGem(永久生成)内存来存储 class 元数据和字符串常量。

PermGen 内存从来都不是堆内存的一部分。它是非堆内存的一部分。但是在Java 8中,为了支持一些性能改进,永久内存被metaspace取代。