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取代。
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取代。