![]() |
温文尔雅的蟠桃 · @babel/preset-env ...· 1 年前 · |
![]() |
深沉的菠菜 · 斯坦福2021版图机器学习课程完结,视频、P ...· 1 年前 · |
![]() |
小眼睛的毛豆 · Vue.js ...· 1 年前 · |
![]() |
挂过科的镜子 · Scala的类层级讲解-阿里云开发者社区· 1 年前 · |
![]() |
多情的莴苣 · 使用OpenCSV在Java中读写CSV - 知乎· 2 年前 · |
CMS(concurrent mark sweep)在jdk1.5中已经开始使用了,2004年9月30日,JDK1.5发布。CMS设计的目标就是获取最低停顿时间(stop the world停顿时间),它是基于
标记-清除
算法实现的。常用的场景是互联网网站(对服务响应要求较高),它是一个老年代垃圾收集器,可以和Serial
收集器,Parallel New
收集器配合使用。当并行模式(concurrent mode failure)失败时CMS会退化成Serial Old
.
主要四个阶段
初始标记
阶段标记过的对象,标记这些对象的可达对象。
并发标记
是和应用线程是并发执行的,所以有些标记过的对象发生了变化。这个过程比
初始标记
用时长,但是比
并发标记
阶段用时短。会发生(stop the world)
标记-清除
算法,所以不可避免会有内存碎片问题。
-XX:+CMSFullGCsBeforeCompaction=n
,意思是在上次
CMS
并发
GC
执行过后,到底还要做多少
Full GC
才做压缩。默认是0,也就是说每次
CMS GC
顶不住了转入
Full GC
时都要压缩。
-XX:+UseCMSInitiatingOccupancyOnly
和
-XX:CMSInitiatingOccupancyFraction=60
,指定CMS对内存的占用率到60%时开始GC。
-XX:+CMSScavengeBeforeRemark
,在执行
重新标记
之前,先做一次
Young GC
,目的在于较少年轻代对老年代的无效引用,降低
重新标记
的开销。
CMS GC
,却触发了
Full GC
?
标记-清除
算法的缺点)
CMS GC
失败(concurrent mode failure导致)
Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
扫码关注腾讯云开发者
领取腾讯云代金券