G1Collector

66 阅读3分钟

特点:

1.并行与并发

使用多个CPU缩短STW停顿时间

2.分代收集

  1. 保留分代的概念,针对年轻代和老年代实施不同的回收策略
  2. 年轻代回收采用暂停时间较短的回收算法,老年代的回收注重效率和空间的整理

3.空间整合

  1. 基于“标记-整理”实现回收器,不会产生内存碎片
  2. 回收后的内存空间被高效利用,减少内存碎片导致的额外内存分配和回收开销

4.可预测的停顿时间

建立可预测的停顿时间模型,指定在一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不得超过N毫秒

工作原理

1.初始标记

标记GC root可达对象,伴随短暂的STW停顿

2.并发标记

初始标记的对象进行可达性分析,与用户线程并发

3.最终标记

修正并发标记期间引发用户程序继续运行导致产生变动的那一部分对象的标记记录,有短暂的STW

4.筛选回收

    1. 对各个Region的回收价值和成本进行排序,根据用户所期望的停顿时间来制定回收计划,可以自由选择多个Region
    1. 构成回收集,然后决定回收的那一部分Region的存活对象复制到空的Region中,再清掉整个旧Region的空间。

优点:

  • 1.可预测的时间停顿:精准控制、适应性强,无论堆的大小如何,G1都可以根据应用的实际情况调整回收策略,满足
  • 设定的停顿时间要求。
  • 2.并行与并发,充分利用CPU多核资源减少STW的时间,且部分程序和应用程序并发执行,不完全被中断,减少了
  • 垃圾回收导致的长时间的停顿对用户体验和性能的影响。
  • 3.分代回收,逻辑上保留了年轻代和老年代的划分,年轻代使用复制算法,老年代使用混合回收算法。
  • 4.空间整合:G1从整体来看基于“标记-整理”算法实现的收集器,不会产生内存碎片。提高内存的使用率,连续的
  • 内存空间有利于内存的分配和存储,提高内存的使用率。特别是对于大对象的分配,不会因为内存碎片而无法找到
  • 连续的空间,避免频繁的外部碎片整理操作。

缺点:

  •  1.内存占用较高
  •  2.执行开销大,如预测停顿时间、分区回收
  •  3.后台线程影响,碎片化问题
  • 4.不适合小内存应用

调整参数:

  • 1.-XX:G1HeapRegionSize:设置 G1 区域的大小。合理调整这个参数可以使对象更均匀地分布在各个区域中,减少因对象大小与区域不匹配导致的碎片化。例如,如果应用中的对象大小比较均匀,可以适当调小区域大小,使对象更紧凑地分配在区域中。
  • 2.-XX:MaxGCPauseMillis:这个参数控制垃圾回收的最大停顿时间。如果将这个值设置得过高,可能会导致 G1 回收器为了满足停顿时间目标而过于频繁地进行部分回收,增加碎片化的风险。可以根据实际应用的性能需求,适当调整这个参数,找到一个平衡点。