【问题标题】:side effect for increasing maxpermsize and max heap size增加 maxpermsize 和最大堆大小的副作用
【发布时间】:2011-08-01 17:32:25
【问题描述】:

谁能解释增加 maxpermsize 和 max heap size 的副作用?

我知道有时,当我们遇到内存不足问题时,我们会增加 -Xmx。但我只是想知道当我们增加 -Xmx 时是否需要记住任何副作用。以及增加 maxpermsize 对运行时有何影响?

谢谢。

【问题讨论】:

    标签: java jvm


    【解决方案1】:

    简答

    Java 堆大小加倍,垃圾收集暂停的等待时间加倍,使用当前的 JVM 技术,当堆处于 Gb 顺序时,等待时间变为数秒。好像是新发布的Java 7 is going to change that

    长答案

    MaxPermSize 是永久代堆的最大大小,该堆保存类的字节码,并与包含实际实例的对象堆分开。对于 Web 应用程序要记住的一件事是,在每次热重新部署中,内存使用量将随着相同类的多个副本而增加。除非指定了 -XX:+CMSClassUnloadingEnabled。

    最大堆大小 (-Xmx) 和 MaxPermSize 必须考虑到应用程序类和实例需要多少内存、服务器的总内存和其他所需的内存应用程序。

    另一个重要的一点是,从 Min Heap Size (-Xms) 扩展内存是一项代价高昂的操作。尤其是在财务申请的情况下,这可能意味着延误。对于类似的实时要求,最好将 -Xms 和 -Xmx 设置为相同的值。

    下面的谈话可能会感兴趣http://www.infoq.com/presentations/Java-without-the-GC-Pauses

    从演讲中您可以看出,将堆增加超过一定限制 2Gb、10Gb、100Gb 的副作用意味着垃圾收集的暂停时间更长,如果堆非常大,可能会停止一切几秒钟或一分钟.

    出于这个原因,使用当前的 JVM 技术,您希望将堆设置为足够大以运行您的应用程序,但又不能太大。一种找到正确大小的方法,可以将其设置为最大可能值,然后减半并继续减半直到发现问题,当你这样做时,将最后找到的值加倍并将其保持为所选堆大小用于生产。

    这个建议当然适用于大堆,以 Gb 顺序排列,如果您的应用程序在 256Mb 内存下运行良好,我会保留该值而无需进一步调查。

    最后,这里有一些示例设置供参考:

    -Xms512m -Xmx512m -XX:MaxPermSize=256m -XX:+CMSClassUnloadingEnabled
    

    【讨论】:

    • 感谢您的参考示例!出于某种原因(虚拟机),复制粘贴对我不起作用,对于那些可能想知道为什么它不起作用的人..
    • @Fico 也许你的虚拟机堆上没有足够的空间用于复制粘贴?
    【解决方案2】:

    通过更改以下设置解决。 文件--> 选项--> 信任中心--> 信任中心设置--> 外部内容--> 为所有工作簿链接启用自动更新。

    --谢谢

    【讨论】:

      猜你喜欢
      • 2013-01-01
      • 2021-09-28
      • 2014-02-02
      • 2012-06-17
      • 2012-10-25
      • 2020-08-05
      • 2014-10-24
      相关资源
      最近更新 更多