
CMS垃圾收集器详解:追求最短停顿时间
下载需积分: 0 | 1.15MB |
更新于2024-08-05
| 148 浏览量 | 举报
收藏
"CMS垃圾收集器是一种Java虚拟机的垃圾收集策略,主要针对老年代的内存回收,以缩短垃圾收集时的停顿时间为目标。CMS基于‘标记-清除’算法,适用于需要快速响应、CPU资源丰富的环境。"
CMS收集器的工作流程包含多个阶段,分别是:
1. 初始标记(Stop the world):这是一个短暂的停顿阶段,CMS首先标记出所有GC Roots可以直接到达的对象。这一阶段可以并行化以减少停顿时间。
2. 并发标记:在这一阶段,CMS垃圾收集器与应用程序线程并发运行,遍历所有可达对象,这可能导致对象图发生变化。
3. 预清理(可被终止的预清理):这是一个可选阶段,用于减少下一次重新标记阶段的工作量,可能因系统资源限制而被取消。
4. 重新标记(Stop the world):由于并发标记期间对象状态可能变化,因此需要再次暂停所有线程,进行快速地重新标记,修正并发标记期间产生的错误标记。
5. 并发清理:这个阶段CMS垃圾收集器与应用程序线程并发执行,清理未被标记的对象,释放内存空间。
6. 并发重置:最后,CMS进行自我恢复,准备下一轮垃圾收集。
在应对内存碎片问题上,CMS提供了两个关键参数:
- UseCMSCompactAtFullCollection:当进行Full GC时是否启用内存碎片整理。
- CMSFullGCsBeforeCompaction:设置多少次不压缩的Full GC后,执行一次带有压缩的Full GC。
CMS收集器虽然能提供较低的停顿时间,但牺牲了系统的整体吞吐量。因此,它更适合那些对响应时间敏感、可以接受一定程度CPU资源消耗的应用。
另一个与CMS相关的收集器是G1(Garbage-First)收集器,它的工作流程与CMS类似,但加入了区域划分和预测停顿时间的机制。G1的阶段包括初始标记、并发标记、最终标记和筛选回收,同样注重降低停顿时间。
在实际使用中,可以通过JVM启动参数`-XX:+UseConcMarkSweepGC`来启用CMS收集器。在配置CMS时,需要综合考虑应用的性能需求和资源限制,以达到最佳的垃圾回收效果。
相关推荐










莉雯Liwen
- 粉丝: 31
最新资源
- 一键部署的PHP在线商店系统教程
- MATLAB实现ER随机网络及其图形绘制
- Java分页组件封装完成,提高开发效率
- ASP.NET与SQL Server在线论坛课程设计报告
- WebClass技术基础教程全面解读
- 全面掌握Excel VBA:从入门到精通的范例解析
- 点对点传输软件实现高效文件共享
- 掌握Linux网络操作的必备命令指南
- AutoCAD ObjectARX实例教程:实现状态栏进度条和模式对话框
- 深入解析Struts源码及应用研究
- 深入解析基于ASP.NET AJAX的邮件系统开发
- PowerBuilder反编译工具正式发布
- MTK下载工具操作指南及资料介绍
- VC象棋小程序开发:源代码与功能解析
- 刘柏森主讲:通信原理课件精讲
- 全面解析项目实施方案及其成功要素
- 深入解析ObjectARX编程中的AcDbXrecord扩展使用
- PHP精简版FCKEDITOR在线编辑器功能介绍
- MySql5.0中文使用手册:快速掌握数据库操作
- Windows服务器Syslog功能使用指南
- VB编写数独游戏源码,矩阵与图片数字应用
- dopod P800简体中文版刷机教程
- 栈的应用:实现数学表达式求值程序
- Solarwinds自定义OID的详细教程