G1垃圾收集器和CMS垃圾收集器对比
G1收集器
gc过程:
- 初始标记:用户线程等待(STW),标记gc roots初次和找到的root节点
- 并发标记:用户线程和gc线程同时运行,标记其余可以达到gcroot的节点
- 重新标记:STW,标记在并发标记中产生的垃圾
- 筛选清除:STW,按照内存需求对每个需要gc的内存块进行gc
特点:
- 将内存划分为多个小的内存块,gc避免内存碎片
- 吞吐量有限
CMS收集器
gc过程:
- 初始标记:用户线程等待(STW),标记gc roots初次和找到的root节点
- 并发标记:用户线程和gc线程同时运行,标记其余可以达到gcroot的节点
- 重新标记:STW,标记在并发标记中产生的垃圾
- 并发清除:和用户线程一起运行,删除除了标记外的其他所有节点
特点:
- 老年代gc算法(标记-清除)
- 响应优先,但是会存在浮动垃圾(必发标记是产生)和内存碎片(标记-清除算法导致,解决方案 CMS完了之后进行一次full gc(标记-整理))