CMS垃圾收集器分析
创作时间:
作者:
@小白创作中心
CMS垃圾收集器分析
引用
CSDN
1.
https://blog.csdn.net/jayhaha123/article/details/140110424
垃圾收集器的判断指标
衡量垃圾收集器的三项重要指标是:内存占用,吞吐量,和延迟,三者构成了一个不可能三角,好的垃圾收集器应该尽可能满足其中的两项。本文分析的CMS垃圾收集器着重于低延迟,如果你希望你的服务器停顿延迟短,CMS就非常满足这类应用的需求。
CMS收集器介绍
CMS(Concurrent Mark Sweep)收集器是用于收集老年代的收集器,采用标记清除算法,下面这张图很好的解释了CMS的执行过程:
一共可以划为4步:
- 初始标记,这一步很快,只是标记一下GCROOTS中能直接关联到的对象
- 并发标记,这一步就是遍历对象图的过程,比较耗时,但CMS在这一步实现了并发
- 重新标记,CMS使用的是增量更新,较原始快照会慢一点,但是浮动垃圾会少一点
- 并发清除,可以注意到采用标记-清除不需要移动对象,我们可以做到并发,那他会有那些缺点呢?(先抛出一个问题
CMS垃圾收集器缺点
Hotspot虚拟机的线程是1对1线程模型。在并发阶段,垃圾收集线程虽然不会导致整个应用停下来,但是会占用处理器资源,还是会导致应用变慢。具体的默认回收线程数是(处理器核心数 +3)/4/。
其次,CMS垃圾收集器无法处理浮动垃圾(在并发阶段,随着用户线程持续运行还是会有垃圾不断产生,CMS无法处理这些垃圾),同时在并发阶段,用户线程也需要一定的空闲堆空间来保证运行,那么如果此时空间不够了,就会导致并发失败(Concurrent Mode Failure),此时采用Serial Old来重新收集老年代。再思考一下,为什么Serial Old而不用Parallel Old收集器呢?他们都要Stop the world呀。因为此时堆内存已经很紧张了,我们还要开多个线程,不是更完蛋吗。
最后,由于采用标记-清除算法,我们在清除时是方便了,但这会导致很多的内存碎片。当空闲内存无法满足对象的分配要求时,我们又会提前进行一次Full GC。好消息是通过参数我们可以改善这个问题:-XX:CMSFullGCsBefore-Compaction(此参数从Jdk 9 开始废弃),这个玩意配置后,我们经过配置的参数次不整理的Full GC后,在下一次进行收集前会进行碎片整理。
热门推荐
黑洞竟是恒星诞生的幕后推手?
黑洞吞噬时空:宇宙奥秘大揭秘!
最新研究:超大质量黑洞如何塑造星系?
从爱因斯坦到霍金:揭秘黑洞的神秘面纱
清华学者陈一镭新突破:格密码学面临颠覆?
CRYSTALS-Dilithium:格密码学的后量子安全卫士
格密码学:未来信息安全的守护神
格基密码硬件新突破:安全界的“黑科技”
NIST推荐:格密码学成后量子密码新宠
沈阳地铁7号线最新进展:浑南科技城崛起!
抓住年轻消费者,春节小生意爆赚攻略
青稞:糖尿病患者的理想主食
青稞美食大挑战:健康又美味!
青藏高原的养生宝藏:青稞米怎么吃?
青稞:心血管健康守护神
揭秘2025春晚小品:《点点关注》与《金龟婿》背后的故事
王者荣耀KPL首个年度总冠军出炉:成都AG独揽2200万奖金
中国第一电竞队伍崛起 揭秘他们的训练秘诀与夺冠之路
正确洗衣小技巧:避开9大禁忌,守护健康与衣物寿命
夏日衣物晾晒大揭秘:如何避免衣物变形和褪色?
创新引领,健康校园:大学校园癌症预防知识推广新思路
熊去氧胆酸胶囊使用指南:适应症、禁忌人群及注意事项全解析
广西中医药大学专家详解:中医如何预防癌症
北京四大夜市全攻略:吃喝玩乐一网打尽!
量子计算破解RSA:从理论威胁到现实挑战
NIST发布首批后量子加密标准,为未来信息安全保驾护航
量子计算来袭!你的数据还安全吗?
山居秋暝的古诗,描绘了何种田园生活?
写给老人,21句过着退休生活的绝美诗词佳句,为人子女也收藏起来
写给老人,21句过着退休生活的绝美诗词佳句,为人子女也收藏起来