JVM—CMS收集器

参考资料:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)周志明

CMS收集器(Concurrent Mark Sweep)是一种以获取最短回收停顿时间为目标的收集器。低并发收集、低停顿。

  • CMS收集器是基于标记---清除算法实现的,它的运作过程分为四个步骤:
  1. 初始标记:标记GC Roots能直接关联的对象;该操作很快,需要暂停用户线程

  2. 并发标记:从GC Roots直接关联对象开始遍历整个对象图的过程。过程耗时长,但不会暂停用户线程,并且可以与 垃圾收集 线程并发运行。

  3. 重新标记: 重新标记则是为了修正并发标记期间,用户程序继续运作,导致标记变动的那一部分对象的标记记录。需要暂停用户线程,比初始标记长比并发标记短。

  4. **并发清除:**清理标记阶段判断已经死亡的对象,由于不需要移动存活对象,所以该过程也是与用户线程并发的。

CMS有以下三个明显缺点:

  1. CUP性能消耗:多开线程,使得CPU消耗增加。

  2. 浮动垃圾(Floating Garbage):由于GC线程和用户线程并发,在GC线程运行过程中产生的垃圾就叫浮动垃圾。这部分垃圾无法在当次收集中处理掉它,只好留到下一次 垃圾收集 中清理。

  3. 内存 碎片:CMS基于标记-清除算法,会产生大量的内存碎片,内存碎片过多会导致大对象的分配出现问题,严重的话会出现OOM。

相关推荐
期待のcode18 小时前
Java虚拟机的运行模式
java·开发语言·jvm
程序员老徐18 小时前
Tomcat源码分析三(Tomcat请求源码分析)
java·tomcat
a程序小傲19 小时前
京东Java面试被问:动态规划的状态压缩和优化技巧
java·开发语言·mysql·算法·adb·postgresql·深度优先
仙俊红19 小时前
spring的IoC(控制反转)面试题
java·后端·spring
阿湯哥19 小时前
AgentScope Java 集成 Spring AI Alibaba Workflow 完整指南
java·人工智能·spring
小楼v19 小时前
说说常见的限流算法及如何使用Redisson实现多机限流
java·后端·redisson·限流算法
与遨游于天地19 小时前
NIO的三个组件解决三个问题
java·后端·nio
czlczl2002092519 小时前
Guava Cache 原理与实战
java·后端·spring
yangminlei20 小时前
Spring 事务探秘:核心机制与应用场景解析
java·spring boot
记得开心一点嘛20 小时前
Redis封装类
java·redis