CMS垃圾收集器

1、可达性分析 & 引用计数法
在cms垃圾收集器的初始标记的时候,标记的就是俩部分:一是 GC roots 引用的老年代对象 二是新生代引用的老年代对象。
而可达性分析所用的GC roots 包括虚拟机栈 中本地变量表中的变量引用的对象、方法区中的静态变量、常量引用的对象、
本地方法栈中的JNI引用的对象。
2、CMS工作流程
初始标记
这时要stw
并发标记
用户线程和垃圾回收线程同时进行,从初始阶段标记的存活对象开始标记所有的存活的对象。由于用户线程也在运行,所以对象的申请以及老年代引用关系 的变化,不可能将所有的存活对象标记。
重新标记
这次是要stw,同时将所有存活对象标记。
并发清除
这时候需要清除未被标记的对象,并回收对象,由于用户线程继续进行会有新的垃圾产生,所以就会有浮动垃圾的产生
3、CMS 特征
CMS 中文名 并发标记清除,追求较少的stw时间。对cpu敏感,由于回收线程和用户线程需要并发执行,所以对cpu资源比较敏感

内存碎片化 问题 采用标记清除算法就会有这个问题。

空间分配担保
新生代gc (minor gc):是将Eden 和一个survivor区 满时 会发生 minor gc,对象创建时会分配到eden ,当发生minor gc 时会将eden 和一个survivor存活的对象复制到另一个survivor中,如果survivor 空间不够则需要进行分配担保。空间分配担保指的是如果新生代存活的对象小于老年代连续空间,那么这次minor gc是 ok的,那么如果大于老年代的连续空间,那么就有风险,所以如果survivor 中不能够存放minor gc 的所有对象,则需要提前进行Major gc ,判断历次晋级老年代对象空间大小平均值与老年代连续空间大小,如果大于,则需要进行老年代gc.
补充:长期存活的对象 进入老年代
补充:动态判定对象向年龄 survivor 中的有一半的对象年龄相等 则直接晋升老年代 无需达到maxTerningThreshold
老年代gc (major gc) :一般是进行一次major gc 之前会伴随一次minor gc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值