Java的PermGen空间是否属于总VM内存的一部分?

12

假设我使用以下参数启动我的Java虚拟机:

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

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

如果这个问题揭示了我对PermGen空间的理解不足,请告诉我。;-)


为什么不试一下呢?应该立即在顶部/任务管理器中可见。 - Michael Borgwardt
3个回答

16

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

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


1
我只是通过谷歌偶然发现了这个页面。关于PerGen是否属于Heap存在一些混淆: 答案是“堆被分成更小的部分/代,这些部分/代是:年轻代、老年代或Tenured Generation和永久代”。至少Oracle是这样说的。按照原始作者的说法比按照网站上的观众更有意义。
PermGen的简短说明: 永久代包含JVM需要描述应用程序中使用的类和方法的元数据。永久代在运行时由JVM基于应用程序中使用的类进行填充。此外,Java SE库类和方法也可以存储在这里。

0
在Sun的JVM中,永久代不是堆的一部分。它是一个不同的空间,用于类定义和相关数据,以及存储池化字符串的地方。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接