增加maxpermsize和max heap size的副作用

时间:2011-08-01 17:32:25

标签: java jvm

有人可以解释增加maxpermsize和max heap size的副作用吗?

我知道有时候,当我们遇到outofmemory问题时,我们会增加-Xmx。但我只是想知道当我们增加-Xmx时是否需要记住任何副作用。增加maxpermsize会如何影响运行时?

感谢。

2 个答案:

答案 0 :(得分:86)

简短回答

加倍Java堆大小,使垃圾收集暂停的等待时间加倍,当堆处于Gb顺序时,当前JVM技术变为多秒。看来新发布的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

答案 1 :(得分:-6)

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

- 由于