JVM垃圾收集器之七(G1收集器)

G1收集器和CMS相比,在同样考虑了低停顿时间之外,另外有着类似于Parallel Scavenge并行回收收集器里类似于预估吞吐量的思想,注意这仅仅是概念类似,实现方式完全不同

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