一、概念解释
- 分区(Region):G1将整个堆划分为同等大小的区块,一个分区可以是年轻代(Eden、Survivor)、也可以是老年代分区;G1是基于一个分区进行垃圾收集的。
- 对象的年龄(Object Aging):存活对象所经历过的年轻代收集的总次数;
- 浮动垃圾:少量死的对象在某次GC后可能还没被回收,这种死了的对象叫做floating garbage。
- CSet:一系列分区的集合,也是在垃圾收集过程中被回收的目标
- RSet:记录从其他分区指向当前分区的引用,本质上数据结构是一个hash table
- mutator线程:在垃圾收集器的术语中被称为Java应用线程
- SATB:Snapshot At the Beginning,是GC开始时活着的对象的一个快照,是G1 GC的理论基础
- 年轻代收集(young gc):CSet里全部都是年轻代分区的收集
- 混合收集(mixed gc):CSet里包括年轻代分区和一部分老年代分区的收集
- 混合收集周期:混合收集可能不止一个,多个混合收集连续发生就组合成一个混合收集周期;
- G1中的垃圾收集过程:年轻代收集和混合收集交替进行,背后有全局的并发标记周期在进行。当老年代分区占用的空间达到或超过IHOP值,就会触发并发标记周期。
- 并发周期
- 初始标记(STW):标记处根集合可直达的对象;
- 并发标记:递归扫描整个堆里的对象图,包括SATB中写栅栏记录的引用;
- 重新标记(STW):处理所有剩下的SATB日志缓冲区和所有更新,也会在这里处理弱引用;
- 清除(STW):识别所有空闲分区、整理堆分区,为混合收集识别出高效的老年代分区;RSet梳理
二、参数学习
- -XX:InitiatingHeapOccupancyPercent:在G1中,IHOP的值是老年代空间占Java堆总空间的比例
- -XX:G1MixedGCCountTarget:一个混合收集周期中包含多少次混合收集
- -XX:G1HeapWastePercent:堆浪费百分比,当G1发现可被回收的空间小于5%时,就不会再进行混合收集,也就是会结束当前的混合收集周期
网友评论