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数据

最新文章

  1. HDOJ 2561. 第二小整数 第k大问题
  2. ubuntu 14.04 desktop装vnc4server
  3. Android 异步任务,通过PHP访问数据库,多线程,线程间通讯
  4. 安卓四大组件之activity和获取网络资源之断点续传
  5. VS 调试
  6. [转]Sublime Text3注册码(可用)
  7. JavaWeb学习记录(十七)——JSP九大隐式对象
  8. OpenCV+QT开发环境(一):Windows环境
  9. 阿里云服务器无法远程其他的mysql服务器
  10. [每日一题] OCP1z0-047 :2013-07-27 外部表――不能被DML和建索引
  11. Ural 1313 - Some Words about Sport
  12. import android.provider.Telephony cannot be resolved
  13. C# GridView Edit & Delete, 点击Delete的时候弹出确认框
  14. mssql sqlserver isnull coalesce函数用法区别说明
  15. elk的备份与恢复【转】
  16. ***阿里云ECS实战配置虚拟主机 + Apache 配置虚拟主机三种方式
  17. Problem after converting keras model into Tensorflow pb - 将keras模型转换为Tensorflow pb后的问题
  18. 配置trunk
  19. samba服务配置(一)
  20. 近5年常考Java面试题及答案整理(二)

热门文章

  1. 静态工厂 + DbHelper
  2. NTLM移除
  3. DS博客作业03—栈和队列
  4. webpack安装整理
  5. 【翻译】 Windows 内核漏洞学习—空指针解引用
  6. Swift5 语言指南(二十七) 访问控制
  7. flask框架~简易编写
  8. Mysql数据优化--DBA梳理珍藏篇
  9. 读取excel合并单元格内容
  10. 让机器说话(文字转美女语音,擅长中英文哦),大小600K(免费下载)!