任何人都可以解释增加maxpermsize和max heap size的副作用吗?
我知道有时候,当我们遇到outofmemory问题时,我们会增加-Xmx.但我只是想知道当我们增加-Xmx时是否需要记住任何副作用.增加maxpermsize如何影响运行时?
谢谢.
sti*_*vlo 86
简短的回答
将Java堆大小加倍,使垃圾收集暂停的等待时间加倍,当堆处于Gb顺序时,当前JVM技术变为多秒.似乎新发布的Java 7将改变这种状况.
答案很长
该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
Run Code Online (Sandbox Code Playgroud)