CMS[并发标记清除]收集器(老年代:标记-清除)
并发(大多数时间)
并行
目标:
缩短停顿时间
CMS的步骤
1.初始标记(短STW)
就标记下根能直接关联到的对象, 很快
2.并发标记
遍历整个对象图, 花费时间长, 还好能和用户线程并发,但是用户线程会降低吞吐量, 这个并发难免的
3.重新标记(短STW)
就是对并发时候新产生变化的修正, 这里是用增量更新
来修正, 就是 把并发标记时 记下来的 有新增的引用的对象开始重新扫描一遍
4.并发清除
用标记清除, 花费时间长 ,还好和用户线程并发
缺点
1.用户线程吞吐量下降
并发不可避免的
2.可能会 并发失败
无法处理浮动垃圾
, 就是收集时用户线程在新产生的垃圾,
因为要和用户线程并发, 所以必须留内存给用户线程用,
需要设置一个阈值, 不是快全满才来发动垃圾回收, 而是到一定百分比(可调)就来收
如果留的内存不够用, 就是并发失败
, STW 用最古老的Serial 来收集了
3.标记-清除产生的碎片
可以设置开启Full GC 事 要合并整理内存, 但是这个过程是STW, 停顿时间又变长
或者设置, 多少次Full GC 以后合并整理
网友评论