G1 垃圾收集器
对于 CMS 来说 G1 究竟改进了什么呢?
- 区域块级化,增加 H 区 。(大对象,巨型对象区)
- 优化垃圾回收清理阶段的逻辑。
- 由用户控制最大 STW 时间,优化用户体验。
G1 的垃圾回收过程为
初始标记 -> 并发标记 -> 最终标记 -> 筛选回收
其中最重要的改变是筛选回收过程变为 STW
而且为什么叫做筛选回收呢,它维护一个优先级列表 根据用户设置的最大 STW 时间 选取回收收益最大的 Region 区域进行回收,也就是可能每次的垃圾回收是不一定能完全回收掉所有垃圾的。
同时因为区域块级化,G1 在回收的时候会采用标记复制的算法进行回收(年轻代回收和老年代回收都是) 这样大大的提高了回收的效率,同时又因为它的块级区即 Region 区是不固定死年代划分的,所以整体看来相当于标记整理算法,没有内存碎片。这是相对于 CMS 标记清除的一大优化。