Java PermGen空间是整个虚拟机内存的一部分吗?

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

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

512m PermGen空间是否可以加入 1024m内存,还是它们的一部分 ? 换句话说,我的内存消耗量是1536米还是1024米? 在后一种情况下,这是否意味着除了PermGen空间之外,应用程序仅有512m用途?

请让我知道,如果这个问题揭示了PermGen空间的缺乏理解。 ;-)


-Xms-Xmx参数指向堆内存,而PermGen空间是独立的内存池。

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


我刚刚通过Google碰到了这个页面。 对于PerGen是否是堆的一部分,这是一定的困惑:答案是“堆被分解成更小的部分/代,这些部分是:年轻一代,老一代或老一代,以及永久代”。 这是甲骨文至少可以说的。 根据发件人的说法,而不是网站上的观众,更有意义。

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


在Sun的JVM中,永久代不是堆的一部分。 对于类定义和相关数据以及字符串存在的地方来说,这是一个不同的空间。

链接地址: http://www.djcxy.com/p/82793.html

上一篇: Is java PermGen space part of the total VM memory?

下一篇: Why does G1 Old gen max memory in jmx equal to max heap size?