G1的三个问题
1) 如果使用G1垃圾回收的时候,应该值得优化的是什么地方?
感觉jvm优化的主旋律就是,尽量让短命对象在新生代回收掉,长期存活对象早进入老年代,G1的优化思路亦是如此。 首先是根据具体业务系统,合理分配老年代和新生代的大小、新生代Eden和Survivor区大小 其次是根据具体业务系统,合理设置G1的MaxGCPauseMills大小。太小容易造成回收频繁,影响系统的吞吐量。太大会增大系统的停顿时间,影响用户体验。
2) 什么时候可能会导致G1频繁的触发Mixed混合垃圾回收?
a)InitiatingHeapOccupancyPercent设置的值太小
b)新生代和老年代空间设置不合理,导致进入老年代对象太多,频繁达到MixedGC的条件;
上面两个原因导致频繁的MixedGC。
3) 如何尽量减少Mixed GC的频率?
首先看触发MixedGC的条件是什么,触发MixedGC条件是到老年代达InitiatingHeapOccupancyPercent设置的值,这就会回到如何让老年代尽量不达到这个值的问题。
a.让垃圾对象尽量在新生代就被回收掉,尽量让短命对象不进老年代。这就要求根据具体应用系统来合理设置新生代Eden大小和Survivor的大小。
b.将老年代设置为较小的值或者提高InitiatingHeapOccupancyPercent的值,这样就可以使达到触发MixedGC概率降低。但这样可能会存在一些问题: (1)、设置老年代为较小的值存在的问题&