G1收集器和CMS相比,在同样考虑了低停顿时间之外,另外有着类似于Parallel Scavenge并行回收收集器里类似于预估吞吐量的思想,注意这仅仅是概念类似,实现方式完全不同
- 使用G1收集器时,堆内存会划分成相等大小的多块独立区域,称为Region
- 新生代和老年代不在是物理上的分离,而是概念上的区分,都是Region的一部分
- G1回收器的工作步骤
- 初始标记
- 并发标记
- 最终标记
- 筛选回收
- G1回收器可以追踪每个Region里的垃圾大小及所需时间,并维护一个优先列表,保证了G1在单位时间内得到更大的回收效率
- GC Root的枚举范围中中添加Remembered Set来管理多个Region中对象相互引用,使得不对堆内存进行全部扫描也能得到完整的垃圾信息
- 使用复制算法及标记-清除算法
- 开启方式-XX:+UseG1GC
- 具有三种GC模式
- young gc,年轻代GC算法,在Eden Region中发生,采用复制算法
- mixed gc,混合GC,老年代达到阈值时进行一次混合GC,回收全部young Region和部分old Region,采用标记-清除算法,如果清除之后Region中没有存活对象就将这个Region加入空闲列表
- full gc,老年代GC算法,采用标记-清除算法,发生在mixed gc来不及回收堆内存,导致堆内存填满的情况下