-XX:带或不带-XX的MaxPermSize:PermSize

时间:2011-12-02 12:35:45

标签: java jvm jvm-hotspot permgen

我们遇到了 Java.lang.OutOfMemoryError:PermGen space 错误并查看了除-Xms-Xmx参数之外的tomcat JVM参数指定-XX:MaxPermSize=128m。经过一些分析后,我可以看到PermGen空间偶尔发生垃圾收集,使其无法完全运行。

我的问题是:除了增加-XX:MaxPermSize之外,如果我同时指定-XX:PermSize会有什么不同?我知道总内存会是 Xmx + maxPermSize ,但是当指定-XX:PermSize时,-XX:MaxPermSize应该还有其他原因吗?

如果您有处理这些JVM参数的实际经验,请分享。

PS。 JVM是HotSpot 64位服务器VM build 16.2-b04

3 个答案:

答案 0 :(得分:43)

-XX:PermSize指定在JVM启动期间分配的初始大小。如有必要,JVM将分配最多-XX:MaxPermSize

答案 1 :(得分:25)

通过使用-XX:PermSize-Xms参数,您可以调整应用程序启动的性能(例如)。我最近没有看过它,但是几年前我的默认值-Xms大概是32MB(我认为),如果你的应用程序需要的不仅仅是它会触发多个循环的填充内存 - 完全垃圾收集 - 增加内存等,直到它加载了所需的一切。此循环可能对启动性能有害,因此立即分配所需的数量可以改善启动。

类似的周期适用于永久世代。因此,调整这些参数可以改善启动(等等)。

警告 JVM在分配内存,划分eden空间和老一代等方面有很多优化和智能,所以不要做-Xms等于-Xmx-XX:PermSize等于-XX:MaxPermSize因为它会删除JVM可以应用于其分配策略的一些优化,因此会降低应用程序性能而不是改进它。

一如既往:进行非平凡的测量,以证明您的更改实际上总体上提高了性能(例如,改善启动时间可能在使用应用程序时对性能造成灾难性后果)

答案 2 :(得分:7)

如果您正在进行一些性能调整,通常建议将-XX:PermSize-XX:MaxPermSize设置为相同的值,以提高JVM效率。

以下是一些信息:

  1. Support for large page heap on x86 and amd64 platforms
  2. Java Support for Large Memory Pages
  3. Setting the Permanent Generation Size
  4. 您还可以指定-XX:+CMSClassUnloadingEnabled以启用类卸载 如果您使用的是CMS GC选项。它可能有助于降低Java.lang.OutOfMemoryError: PermGen space

    的概率