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。

相关推荐
XS0301064 分钟前
Java基础笔记(一)
java·笔记·python
21439657 分钟前
网页如何运行html
jvm·数据库·python
程序员老邢7 分钟前
【产品底稿 05】商助慧 V1.1 里程碑:RAG 文章仿写模块全链路实现
java·spring boot·程序人生·ai·milvus
2402_8548083716 分钟前
Golang数组和切片有什么区别_Golang数组切片对比教程【通俗】
jvm·数据库·python
2401_8654396318 分钟前
如何在 Go 中精确安装指定版本的模块
jvm·数据库·python
消失的旧时光-194325 分钟前
Spring Boot 实战(三):Service 分层 + 统一返回 + 异常处理(工程级写法)
java·spring boot·接口·解耦
云烟成雨TD26 分钟前
Spring AI Alibaba 1.x 系列【20】MessagesAgentHook 、MessagesModelHook 相关实现类
java·人工智能·spring
霸道流氓气质28 分钟前
SpringBoot中集成LangChain4j实现集成阿里百炼平台进行AI对话记忆功能和对话隔离功能
java·人工智能·spring boot·langchain4j
zhangchaoxies30 分钟前
c++ rpc框架选择 grpc和thrift哪个更适合c++
jvm·数据库·python
2301_8152795233 分钟前
怎么管理开启了审计日志的金融级数据库实例_合规访问控制
jvm·数据库·python