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

时间:2010-11-19 09:50:56

标签: java memory memory-management permgen

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

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

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

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

3 个答案:

答案 0 :(得分:16)

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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