增加maxpermsize和最大堆大小的副作用
谁能解释增加maxpermsize和max堆大小的副作用?
我知道有时遇到内存不足问题时,我们会增加-Xmx。但是我只是想知道在增加-Xmx时是否需要记住任何副作用。增大maxpermsize会如何影响运行时间?
谢谢。
回答:
将Java堆大小加倍,会使垃圾收集暂停的等待时间增加一倍,而当堆按Gb顺序使用当前的JVM技术时,该等待时间将变为数秒。看来新发布的Java
7将改变这种状况。
该
是为永久生成堆的最大大小,保持类的字节代码和从包含实际实例对象堆被保持分离的堆。对于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
以上是 增加maxpermsize和最大堆大小的副作用 的全部内容, 来源链接: utcz.com/qa/435353.html