简单分析java中CMS回收器
CMS(Concurrent Mark Sweep)回收器
它使用的是标记清除算法,同时又是一个使用多线程并行回收的垃圾回收器。
CMS主要工作步骤
CMS工作时主要步骤有初始标记、并发标记、预清理、重新标记、并发清除和并发重置。其中初始标记和重新标记是独占系统资源的,而预清理、并发标记、并发清除和并发重置是可以和用户线程一起执行的。因此它可以在应用程序运行过程中进行垃圾回收。

根据标记清除算法,初始标记、并发标记和重新标记都是为了标记出需要回收的对象。并发清理则是在标记完成后,正是回收垃圾对象。并发重置是指在垃圾回收完成后,重新初始化CMS数据结构和数据,为下一次垃圾回收做好准备。
在整个CMS回收过程中,默认情况下,在并发标记之后,会有一个预清理的操作(也可以设置参数-XX:CMSPrecleaningEnabled,不进行预清理)。预清理是并发的,除了为正式清理做准备和检查以外,预清理还会尝试控制一次停顿时间。由于重新标记是独占CPU的,如果新生代GC发生后立即触发一次重新标记,那么一次停顿时间可能很长。为了避免这种情况,预清理时,会可以等待一次新生代GC的发生,然后根据历史性能数据预测一下新生代GC可能发生的时间,然后在当前时间和预测时间的中间时刻,进行重新标记。这样,最大程度上避免新生代GC和重新标记重合,尽可能减少一次停顿时间。
CMS主要参数设置
-XX:+UseConcMarkSweepGC启用CMS回收器
-XX:ConcGCThreads 设置并发线程数量
-XX:CMSInitiatingOccupancyFraction 设置当老年代使用率达到N时,执行一次CMS回收。
-XX:+UseCMSCompactAtFullCollection CMS在垃圾收集完成后,进行一次碎片整理。
-XX:CMSFullGCsBeforeCompaction 设置当进行N次CMS回收后进行一次内存压缩。
-XX:+CMSClassUnloadingEnabled 使用CMS机制回收Perm区Class数据
上一篇:详解JAVA的封装
栏 目:JAVA代码
下一篇:Java设计模式之工厂模式分析【简单工厂、工厂方法、抽象工厂】
本文标题:简单分析java中CMS回收器
本文地址:http://www.codeinn.net/misctech/48126.html


阅读排行
- 1Java Swing组件BoxLayout布局用法示例
- 2java中-jar 与nohup的对比
- 3Java邮件发送程序(可以同时发给多个地址、可以带附件)
- 4Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常
- 5Java中自定义异常详解及实例代码
- 6深入理解Java中的克隆
- 7java读取excel文件的两种方法
- 8解析SpringSecurity+JWT认证流程实现
- 9spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)
- 10深入解析java虚拟机




