1.初始标记 STW
2.并发标记 与用户线程共同进行
cms
3.重新标记 STW
采用增量更新,即标记并发期间增量的引用对象(下图中的红色对象)
但不会取消标记并发标记期间产生的垃圾,所以不能处理浮动垃圾
宁愿放到下次回收处理,也不愿错删
4.并发清理 与用户线程共同进行
g1最终标记
3.最终标记
采用原始快照即:【SATB】
浮动垃圾
对象可能会在 G1 收集期间死亡并且不会被收集。G1 使用一种称为开始快照 (SATB) 的技术来保证垃圾收集器找到所有活动对象。SATB 指出,出于收集的目的,在并发标记(整个堆上的标记)开始时处于活动状态的任何对象都被认为是活动的。SATB 允许以类似于 CMS 增量更新的方式浮动垃圾。
对并发标记前的活动对象快照,在最终标记期间重新标记
4.筛选回收
对各个Region的回收价值和成本进行排序,根据用户所期望的GC停顿时间来制定回收计划