前面介绍了Serial GC、CMS、Parallel GC。这些垃圾回收器相较于G1,还是稍显逊色。G1在大内存的情况下优势十分明显。
G1设定的目标:延迟可控的情况下获得尽可能高的吞吐量。
我们知道,在G1垃圾回收器之前,前面的垃圾回收器都是将内存划分为新生代与老年代,并且它们的内存区域是连续的。 而G1则不同,虽然它依旧有新生代、老年代,但是它用一个一个的region来表示。
原来的内存结构 G1使用的内存结构
G1将内存划分为一个一个的region,内存回收就是以region作为其基本内。region之间使用复制算法,但整体上面来看是使用标记-整理算法由于这两个回收算法的特点,可以避免内存碎片化问题。触发GC的几率大大减少。G1在垃圾收集产生的内存占用还是在程序运行时的额外执行负载,都要比CMS高。
经验选择:在小内存的应用选择CMS。大内存运用选择G1。两者平衡点在6~8GB之间。
G1垃圾回收过程,详细介绍请参照 JVM垃圾回收器之G1(Garbage First)(二)