简短答案
将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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)