Mixed GC
Mixed GC(混合回收)是G1独有的回收策略,它与YGC的回收策略的区别如下:
YGC:选定所有Eden Region放入CSet,使用多线程复制算法将
CSet的存活对象复制到Survivor Region或者晋升到Old Region。
Mixed GC:选定所有Eden Region和全局并发标记计算得到的收益较高的部分Old Region放入CSet,使用多线程复制算法将CSet的存活对象复制到Survivor Region或者晋升到Old Region。
相比于YGC,Mixed GC增加了全局并发标记过程,它能够回收部分Old Region,不会再出现在CMS GC中老年代出现的碎片化问题,因为当老年代被加入CSet后,G1会使用和YGC一样的复制算法整理空间。Mixed GC的回收过程如图11-4所示。
图11-4 Mixed GC的回收过程
总结来说,Mixed GC回收周期包括全局并发标记和复制存活对象,其中复制存活对象这一步完全复用YGC代码。
SATB
谈并发垃圾回收算法必然绕不过对象丢失问题。上节提到过,在并发标记过程中,只要满足两个条件就会造成对象丢失,解决方案通常有增量更新技术和SATB。CMS GC使用增量更新技术破坏第一个条件来解决对象丢失问题,而G1使用SATB破坏第二个条件来解决对象丢失问题。
SATB会在GC开始时为对象关系打下一个快照,除了快照中存活的对象和GC过程中分配的新对象外,其他都是死亡对象。SATB的快照和GC期间新分配的对象由TAMS实现。TAMS(Top At Mark Start)是一个指针,每个Region包括Bottom、End、Top、PrevTAMS和NextTAMS指针,如图11-5所示。