java PermGen空间是整个VM内存的一部分吗?

假设我用以下参数启动我的java VM:

-Xms1024m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m 

512m PermGen空间是否会添加到1024m内存中,还是它们的一部分 ? 或者换句话说,我的总内存消耗是1536米还是1024米? 在后一种情况下,这是否意味着应用程序只有512m用于PermGen空间以外的目的?

如果这个问题显示对PermGen空间缺乏了解,请告诉我。 😉

-Xms-Xmx参数指的是内存,而PermGen空间是一个单独的内存池。

换句话说,Java应用程序可用的总内存大小将是1.5 GiB而不是1 GiB,并且您将获得堆分配对象的完整千兆字节空间。

我刚刚通过Google碰到了这个页面。 PerGen是否是Heap的一部分,这是一定的混淆:答案是“堆被分解成更小的部分/代,这些部分是:年轻一代,老一代或终身代,以及永久代”。 这就是甲骨文所说的至少。 通过发起者所说的比通过网络域的受众更有意义。

关于PermGen的简短说明:永久生成包含JVM描述应用程序中使用的类和方法所需的元数据。 JVM在运行时根据应用程序使用的类填充永久代。 此外,Java SE库类和方法可以存储在此处。

在Sun的JVM中,永久代不是堆的一部分。 它是类定义和相关数据的不同空间,也是实习字符串所在的空间。