2010-11-19 54 views
11

假设我开始我的Java虚拟机具有以下参数:Java PermGen是VM总内存的一部分吗?

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

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

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

+0

你为什么不尝试一下?应该立即在顶部/任务管理器中可见。 – 2010-11-19 09:56:23

+0

[是否包含在-Xmx中的permgen]的可能重复(http://stackoverflow.com/questions/4084280/is-permgen-included-in-xmx) – 2014-10-31 12:09:52

回答

15

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

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

0

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

1

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

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