一步一图带你理清G1垃圾回收流程
1 Yong Collection
- 当
Eden
区域装满,会触发Yong GC
,那么Yong GC
会通过复制算法来进行垃圾回收 - 同时系统进入
“Stop the World”
状态,然后把Eden
区中的对应的Region
里存活的对象(也是通过打标记记录存活对象)拷贝
到某个survivor中 - 接着回收掉
Eden
对应的Region
中的垃圾对象 - 多次回收后仍幸存的对象进入old
2 Yong Collection + Concunrrent Mark
2.1 Yong Collection
重复1
中G1新生代垃圾回收操作,同时对GC Roots
能直接关联到的对象做初始标记;
2.2 Concunrrent Mark
当G1新生代垃圾回收结束后,开始进入并发标记阶段:
- 从
GC Root
开始对堆中对象进行可达性分析(判断该对象是否在GC Root
引用链上),递归扫描整个堆里的对象图,找出要回收的对象; - 这阶段耗时较长,但可与用户程序并发执行
3 Mixed Collection
前面1
、2
只是对Eden
、survivor
区域的对象进行垃圾回收,Mixed Collection
对E
、S
、O
、H
中的对象进行全面回收。
主要分两步:
- 最终标记(类似
CMS
中的重新标记?):根据并发标记阶段记录的对象修改,最终标记哪些对象是存活,哪些对象是垃圾; - 老年代old中的对象拷贝复活:根据标记-复制算法(复制算法)来进行对象回收,会将标记存活的对象拷贝到新的Region中作为老年代区域
参考知乎上看到的一篇文章:24-一步一图带你理清G1垃圾回收流程