1

我对 Java 中的元空间感到困惑。它在哪里?一些文章将 PermGen(Metaspace) 视为堆的一部分,其中一些视为内存的堆外部分:

方法区(元空间的一部分)在这里是堆的一部分:http: //javapapers.com/core-java/java-jvm-run-time-data-areas/

这不是: http ://blog.jamesdbloom.com/JVMInternals.html

我对运行时常量池也有同样的问题。有些文章将其视为堆的一部分,有些则将其视为方法区的一部分。

它取决于 JVM 的实现,或者只是在 Java 发布期间发生的变化(并且文章是旧的)?如果是关于 JVM 的实现,它在 HotSpot 中是如何工作的?

谢谢!

4

1 回答 1

1

这些内存区域的位置在很大程度上是概念性的,因为它们使用虚拟内存。Perm Gen 和 MetaSpace 不使用堆空间,也不计入最大堆大小,即-Xmx

它们是像堆一样的托管内存区域,但我不认为它们是堆的一部分,而是一个单独的区域。

于 2017-03-26T14:57:51.453 回答