如何根据项目的需要设置Java运行参数,以达到更好的运行效率,及出现性能瓶颈时如何优化,还有哪些潜在的经验和规则。

JVM调优

GC的性能指标主要考虑两个方面:吞吐量和STW时间。应尽量减少Major GC的频率。

  • 堆大小尽量设置大一点,且-Xms-Xmx设置相同的大小;
  • 新生代大小设置合理,通过-Xmn参数设置,控制好新生代和老年代的比例,如果过小,则会导致频繁YGC,对象进入老年代,使老年代过早进入FullGC;
  • 当使用CMS收集器的时候,老年代会产生内存碎片,因此要开启-XX:+UseCMSCompactAtFullCollection参数来开启对老年代内存的压缩,使用-XX:CMSFullGCsBeforeCompaction=0参数,进行多少次FullGC后压缩;
  • 采用并发回收时,年轻代可以小一点,年老代要大,因为年老代用的是并发回收,即使时间长点也不会影响其他程序继续运行,网站不会停顿;
  • 如果是web应用,采用CMS收集器时,可能是好的选择。