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导致)原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。