cms的特点和缺点,与g1对比

cms 特点是 有多个清理线程和 业务线程一起工作,
并行执行时,会用到三色标记的方法 标记对象,
黑色表示 自身和子节点全部扫描了
灰色表示 自身扫描过了
白色表示 未扫描
当与业务线程同时执行时,难免会产生浮动垃圾
如: A.b=b ,标记a为黑色后, A.b=null,由于a为黑色 不在扫描
所以b为浮动垃圾,等待下次扫描才能回收,这种情况无问题。
问题 A.b=null;A.c=c, 当清理线程x标记完A.b,此时被打断,因此标记A
为灰色,清理线程y进场标记A.b=b, 此时b已经不是垃圾,但对x来说无感知,因此x线程继续扫描完c后,将a标记为黑色,此时b会被当成垃圾回收,
针对这种情况,cms的处理是 三色标记标完之后 也就是并行回收阶段结束,
不会立即回收对象,而是等到并行回收结束后,有过标记之后 重新快速标记,此时需要stw,不会产生上述问题,但当业务体积变大,此时的stw时间也会变长,因此引入了g1.

g1的解决方案是: 当并行标记阶段,A.b=b或者A.b=null发生变化时,会将变化记录下来,当x线程重新进场标记,会先去看这个记录。因此避免了将有用的对象当成垃圾的问题。
g1 会将内存物理上分为很多小块,分代的eden,s1,s2,只存在于逻辑上,这些小块会被jvm算法动态分配到eden,s1等区域,
因此g1收集器一般不用指定这些区域的大小去调优,参数-xx:g1HeapRegionSize调整小块的大小,1-32m

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值