CMS垃圾回收器:
CMS是作用于老年代的并发垃圾回收器,使用标记清除算法,工作流程是:初始标记,并发标记,再次标记,并发清除
优点
- 耗时最长的并发标记和并发清除阶段gc线程和用户线程是并发执行的,因此其STW时间短,适合对延迟有要求的任务
缺点:
- CMS在老年代使用的是标记清除算法,会产生大量内存碎片
- GC线程与用户线程并发执行,二者会抢占cpu,并且会产生浮动垃圾
初始标记阶段会发生短暂的stw,用于标记GCRoot对象能够直接到达的对象
并发标记阶段gc线程根据GCRoot对象标记可到到的存活对象,应用程序可以和gc线程并行进行,不需要stw
再次标记阶段会进行stw,目的是为了修正因为并发标记阶段应用程序和gc线程并发执行产生的浮动垃圾
并发清除阶段gc线程清除垃圾对象,gc线程和应用线程并发执行因此会产生浮动垃圾,在下一次gc清理该浮动垃圾
G1垃圾回收器:
G1垃圾回收器是一款可以同时管理新生代和老年代,在老年代使用标记整理算法,其最大的特点是将内存划分为多个大小相等region,每个region都可以作为伊甸区,survivor区,老年代
优点:
- 老年代使用标记整理算法,不会产生内存碎片
- 使用region,不会出现新生代或者老年代分配空间过大而造成浪费
- 每次只选择垃圾对象多的region,而不是整个堆,大幅减少了STW时间(但region与region之间是有依赖关系的,g1维护了一个Remembered Set记忆集记录了region的依赖关系,只需要扫描关联的region,而不是整个堆)
- 用于可预测停顿的模型,可以指定STW时间(也就是可预测停顿),比如在一小时内垃圾回收导致的"stop the world"时间不超过一分钟。 </