码迷,mamicode.com
首页 > 其他好文 > 详细

JVM垃圾收集器CMS和G1

时间:2019-12-18 14:26:30      阅读:76      评论:0      收藏:0      [点我收藏+]

标签:价值   div   nbsp   图片   获取   com   根据   大量   ati   

CMS(Concurrent Mark Sweep)收集器是一种以获取 最短回收停顿时间 为目标的收集器。采用的是"标记-清除算法",整个过程分为4步

由于整个过程中,并发标记和并发清除,收集器线程可以与用户线程一起工作,所以总体上来说,CMS收集器的内存回收过程是与用户线程一起并发地执行的。集器
G1特点:
(1)初始标记 CMS initial mark 标记GC Roots能关联到的对象 Stop The World--->速度很快
(2)并发标记 CMS concurrent mark 进行GC Roots Tracing
(3)重新标记 CMS remark 修改并发标记因用户程序变动的内容 Stop TheWorld
(4)并发清除 CMS concurrent sweep
优点:并发收集、低停顿
缺点:产生大量空间碎片、并发阶段会降低吞吐量
图解说明:
技术图片
 G1收集器
特点:
并行与并发分代收集(仍然保留了分代的概念)空间整合(整体上属于“标记-整理”算法,不会导致空间碎片)
可预测的停顿(比CMS更先进的地方在于能让使用者明确指定一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不得超过N毫秒)
步奏:
初始标记(Initial Marking) 标记一下GC Roots能够关联的对象,并且修改TAMS的值,需要暂停用户线程
并发标记(Concurrent Marking) 从GC Roots进行可达性分析,找出存活的对象,与用户线程并发执行
最终标记(Final Marking) 修正在并发标记阶段因为用户程序的并发执行导致变动的数据,需暂停用户线程
筛选回收(Live Data Counting and Evacuation) 对各个Region的回收价值和成本进行排序,根据用户所期望的GC停顿时间制定回收计划 
 
图解说明:
 
技术图片 
比较CMS和G1的区别:
cms大致可以这么理解:初始化--->用户现场和并发线程共同执行--->重新标记--->并发清理的同时用户线程继续执行
g1大致可以这么理解:在cms基础上面可以调节垃圾收集停顿时间。

JVM垃圾收集器CMS和G1

标签:价值   div   nbsp   图片   获取   com   根据   大量   ati   

原文地址:https://www.cnblogs.com/sunxuesong/p/12059524.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!