CMS收集器

Concurrent Mark Sweep,并发标记清除

  • 初始标记
  • 并发标记
  • 预清理(可关闭)
  • 并发清理
  • 并发重置

在这里插入图片描述
CMS是一个关注停顿的垃圾回收器。同时CMS回收器在部分工作流程中,可以与用户程序同时运行,从而减少应用程序的停顿时间。

  • CPU资源敏感: 当CPU资源比较紧张时,应用系统的性能在垃圾回收可能会很糟糕

  • 无法处理浮动垃圾: 并发清楚阶段用户线程还在运行,就会有新的垃圾产生,这一部分垃圾没有被标记,在本次GC中无法处理,只能等到下一次再处理。CMS垃圾收集阶段用户程序还要运行,所以他需要预留出一部分内存空间给用户线程使用,就不能跟其他收集器一样等到老年代快满了才收集。如果CMS运行期间内存不够了就会出现Concurrent Mode Failure,这时虚拟机将使后备预案,使用老年代串行回收器进行垃圾回收,此时应用程序将完全中断,直至回收完成。

  • 大量空间碎片产生: 这个是使用标记清除法引起的问题。针对这个问题CMS提供了两个参数:

    • -XX:+UseCMSCompactAtFullCollection:FullGc后对内存进行压缩整理;·
    • -XX:CMSFullGCsBeforeCompaction=x:执行x次不压缩的FullGc后执行一次压缩的。

相关配置参数

// 启用CMS回收器
-XX:+UseConcMarkSweepGC
// 关闭预清理
-XX:-CMSPrecleaningEnabled
// 在CMS GC前启动一次ygc
-XX:+CMSScavengeBeforeRemark

// 并发下线程数设置
-XX:ConcGCThreads
-XX:ParallelGCThreads

// 垃圾收集完成后进行一次内存清理
-XX:+UseCMSCompactAtFullCollection
// 设置在执行多少次Full GC后对内存空间进行压缩整理。
-XX:CMSFullGCsBeforeCompaction

// 指定老年代空间使用率达到多少时进行一次CMS垃圾回收
-XX:CMSInitiatingOccupancyFraction=68
// 使用上面参数指定的回收阈值,JVM仅在第一次使用设定值,后续则会根据运行时采集的数据做自动调整
-XX:+UseCMSInitiatingOccupancyOnly

// 开启Perm区回收功能
-XX:+CMSClassUnloadingEnabled
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值