GC优化

https://tech.meituan.com/jvm_optimize.html

1、问题:Minor GC太过频繁

方案:新生代太小,扩容之

2、对象年龄作为新生代晋升到老年代的标准,是动态变化的

Hotspot遍历所有对象时,按照年龄从小到大对其所占用的大小进行累积,

当累积的某个年龄大小超过了survivor区的一半时,取这个年龄和MaxTenuringThreshold中更小的值,作为新的晋升年龄阈值。

在本案例中,调优前:Survivor区 = 64M,desired survivor = 32M,此时Survivor区中age<=2的对象累计大小为41M,41M大于32M,所以晋升年龄阈值被设置为2,下次Minor GC时将年龄超过2的对象被晋升到老年代。

3、CMS默认情况下不会回收Perm区

4、什么时候可能会触发STW的Full GC呢?

  1. Perm空间不足;
  2. CMS GC时出现promotion failed和concurrent mode failure(concurrent mode failure发生的原因一般是CMS正在进行,但是由于老年代空间不足,需要尽快回收老年代里面的不再被使用的对象,这时停止所有的线程,同时终止CMS,直接进行Serial Old GC);
  3. 统计得到的Young GC晋升到老年代的平均大小大于老年代的剩余空间;
  4. 主动触发Full GC(执行jmap -histo:live [pid])来避免碎片问题。

 

你可能感兴趣的:(java)