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中,永久代不是堆的一部分。 它是类定义和相关数据的不同空间,也是实习字符串所在的空间。