增加maxpermsize和最大堆大小的副作用

增加maxpermsize和最大堆大小的副作用,第1张

增加maxpermsize和最大堆大小的副作用

简短答案

将Java堆大小加倍,会使垃圾收集暂停的等待时间增加一倍,而当堆按Gb顺序使用当前的JVM技术时,该等待时间将变为数秒。看来新发布的Java7将改变这种状况。

长答案

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

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

另一个重要的一点是,从 最小堆大小
(-Xms)扩展内存是一项昂贵的 *** 作。特别是在财务应用程序的情况下,这可能意味着延迟。对于类似的实时要求,将-Xms和-Xmx设置为相同的值可能是个好主意。

以下演讲可能引起您的兴趣http://www.infoq.com/presentations/Java-without-the-GC-
Pauses

从谈话中可以看出,增加堆超过特定限制2Gb,10Gb,100Gb的副作用意味着更长的Garbage
Collection暂停时间,如果堆很大,则可能停止几秒钟或一分钟。

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

当然,此建议适用于以Gb为单位的大堆,如果您的应用程序在256Mb内存下运行良好,那么我将保留该值,而无需进一步研究。

最后供参考的是一些示例设置:

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


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5054561.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存