根据应用程序设置JVM参数(二)-优化新生代大小


一、


还是接着上一篇的讲:


继续贴上一次运行的日志数据



根据应用程序设置JVM参数(二)-优化新生代大小_第1张图片



分析:

1.看频率,可以发现基本上是4秒进行一次Gc

2.看耗时,可以发现基本上是需要0.037秒


当前的虚拟机设置为:

堆:1600M

年轻代:600M

年老代:1000M


二、优化

需求1:

要求MinorGc的响应时间小于0.02秒

分析:

需要减少MinorGc的时间,那一定是因为年轻代的容量太大了,以至于一次清理耗时较久。

所以需要较少年轻代的大小,虽然这样会增加MinorGc的频率。

因为目前耗时是0.037,几乎是2倍于目标,所以将年轻代的大小减少为1/2,保持年老带不变。

-Xms1300m -Xmx1300m -Xmn300m



需求2:

要求MinorGc的响应时间小于0.1秒

既然对响应要求不是那么严格,就可以增大年轻代的空间,减少minorGc的频率。

现在是0.037,目标是0.1。假定是正比,那么可以把年轻代的大小提2.5倍(+900m)。

-Xms2500,m -Xmx2500m -Xmn1500m


三、准则


1.老年代空间大小不应该小于活跃数据大小的1.5倍

2.新生代空间至少应为Java堆的10%,,通过-Xmx和-Xms可以设定该值。

3.增大Java堆大小时,需要注意不要超过JVM可用的物理内存数。


这个阶段中,如果只考虑minorGc引起的延迟,而调整新生代的大小又无法满足应用程序的平均停顿时间或延迟性要求,就只能修改应用程序或者改变JVM的部署模式,在多个JVM上部署应用程序,或者修改应用程序的平均延迟性要求。



参考:《java性能优化权威指南》

你可能感兴趣的:(java性能优化)