G1垃圾收集器
堆的逻辑划分
堆被划分了多个同等份的区域,每个区域叫做Region
Humongous(大对象)区域
- 存储特别大的对象(大于Region内存的一半)
- 若没有引用指向大对象,就可直接在Minor GC中被回收掉
对于「小区域」回收容易控制它的「收集时间」(STW)
Minor GC(Young GC)
触发时机同之前,等到Eden区满了之后会触发
年轻代和老年代占堆空间(有参数设置)
- 会动态根据「最大停顿时间」进行调整,控制MInor GC开销
GC过程
-
根扫描
-
更新、处理 RSet
-
复制对象
- 扫描存活的对象往「空的Survivor区」或「老年代」存放,其他的Eden区进行清除
-
Cset
Mixed GC
触发机制
GC过程
-
初始标记(STW)
-
并发标记
- 从GC Roots往下追溯,GC线程负责收集各个 Region 的存活对象信息
-
重新标记(STW)
-
清理(STW)
- 根据「停顿预测模型」(设定的停顿时间)决定本次GC回收多少Region。主要清点和重置标记状态
- Mixed GC 进行清除是通过「拷贝」的方式
Full GC
如果在Mixed GC中无法跟上用户线程分配内存的速度,导致老年代填满无法继续进行Mixed GC,就又会降级到serial old GC来收集整个GC heap
三色标记
-
产生C浮动垃圾
- 漏标:黑色指向白色若不重新扫描黑色,会把C当作没有新引用而回收
|