G1垃圾收集器&CMS收集器

G1是一款并行并发、分代收集的垃圾收集器,旨在提供可预测的停顿时间模型。它将堆划分为区域,并优先回收价值最大的区域。CMS收集器则以最短停顿时间为目标,采用并发标记清除算法,但存在CPU资源敏感、浮动垃圾处理和内存碎片等问题。

G1是一款面向服务端的垃圾收集器,他的特点
1)并行并发,并行是指G1利用服务端多核优势缩短stop the world的时间,并发是指G1可以使GC线程和用户线程并发执行
2)分代收集,G1虽然还保存分代收集概念,但是G1 可以管理整个java堆不需要其他收集器配合
3)空间整合:从总体看G1是采用标记清除算法,局部看是采用复制算法,这样就不会产生内存碎片
4)可预测停顿:G1和CMS相比除了降低可停顿时间还可以建立可预测的停顿时间模型,就是你可以指定在长度为M的时间段内,消耗在垃圾收集上的时间不超过N毫秒
G1可以实现可预测停顿,依赖于,首先把java堆把java堆划分为大小相等的独立区域region,G1跟踪各个region里面垃圾堆积的价值大小,在后台维护一个优先队列,每次根据允许的时间优先回收价值最大的region

G1收集器的运作流程:
1)初始标记:stop the world,初始标记是标记一下GCRoot能直接关联的对象速度很快
2)并发标记:从GCRoot开始对堆中对象进行可达性分析
3)最终标记:修正并发标记的变动部分,把remembersetlog数据合并到rememberset中,这段时间stop the world但是可以并行执行
4)筛选回收:对region中回收价值和成本进行排序,然后在用户期待的时间内选择回收计划

1、CMS垃圾收集器的目标是,获取最短的回收停顿时间,所以他很适合用于要求响应速度的服务,希望系统停顿时间短,给用户带来较好的体验
2、CMS收集器是基于标记-清除算法实现,适合于老年代的回收,他的特点就是并发收集,低停顿
3、他CMS收集器的回收过程:
1)初始标记,stop the world,初始标记是标记一下GCRoot能直接关联的对象速度很快
2)并发标记,并发标记 就是进行GCRoot tracing过程
3)重新标记,stop the world,重新标记是为了修正并发标记期间因用户程序运作而导致变动的的那
一部分对象,这个阶段的标记比初始标记时间长但比并发标记时间短
4)并发清除
4、CMS之所以可以缩短停顿时间,是因为整个过程最耗时的过程也就是并发标记和并发清除可以和用户线程
一起工作
5、CMS收集器有3个缺点
1)对CPU资源非常敏感,CMS在并发标记和清除阶段,CMS默认启动的回收线程数是(CPU数量+3)/4
这个公式可以看出当CPU数量较少比如只有2个,那么垃圾回收线程就要占用1个CPU,也就是50%的CPU资源用来做垃圾回收,效率降低,后来有一个改进交增量式并发收集器,使用抢占式多任务机制思想,在并发标记和清除线程和用户线程抢占CPU资源,尽量减少GC线程独占CPU资源,这样做的话会延长GC时间,但是后面数据证明这种改进效果也一般
2)CMS收集器无法处理浮动垃圾,什么是浮动垃圾,浮动垃圾就是在并发清除过程用户线程也在执行,那这段时间产生的垃圾还没标记,这个叫浮动垃圾
3)CMS是基于标记-清除算法所以很容易产生内存碎片,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值