CMS一直是面试中的常考点,今天我们用通俗易懂的语言简单介绍下。

垃圾回收器为什么要分区分代?


如上图:JVM虚拟机将堆内存区域分代了,先生代是朝生夕死的区域,老年代是老不死的区域,不同的年代对象有不同特性,因此需要不同的垃圾收集器去处理。如下图,黑竖线左边的区域都是分代垃圾收集器,G1之后内存就不分代了。

单线程垃圾收集器:Serial + Serial Old


Serial(SY),Serial Old(SO)是单线程垃圾收集器组合,垃圾收集线程是单线程的,随着现代内存区域越来越大,SY+SO组合已经越来越少了。垃圾收集的单线程需要STW时间无疑越长。这种组合比较合适较早JDK版本。如下图,用户线程表示应用程序处理过程,垃圾收集线程表示垃圾线程清理垃圾过程,此阶段应用程序是需要等待垃圾线程STW的。

多线程垃圾收集器:PS+PO


前面我们说了,单线程垃圾收集器缺点就是当内存区域变大,收集效率会很低,那OK,摇身一变,如下图,多线程垃圾处理器。

值得注意的是:PS+PO组合是JDK1.7,JDK1.8默认垃圾收集器。通过java -XX:+PrintCommandLineFlags命令可以在Dos界面查看。如下图,该命令可以查看JVM初始化的默认参数。比如:-XX:InitialHeapSize表示初始化堆大小。

为啥蹦出来个CMS+ParNew


并行处理有了,CMS+ParNew又是干嘛的?其实PO关注是吞吐量,而CMS关注是缩短STW时间。而CMS处理流程更复杂,至于ParNew,其实约等于PS,如果你注意最上面一个图,你会发现PS年轻代无法和CMS组合。所以就多出来了一个ParNew。

介绍CMS阶段


CMS,全名称Concurrent Mark Sweep,中文释义并发标记清除,从名字上可以看出算法思想使用标记清除算法,下面我们看看CMS简化处理流程。

  • 初始标记。只标记GC root可达的第一个节点。会短暂的STW。
  • 并发标记。用户线程和垃圾线程同时进行。垃圾线程会继续向下寻找GCroot,不会有STW。但也会有两个问题。
    • 多标:之前不是垃圾,现在线程出栈引用断开了变成了垃圾。也称为浮动垃圾。
    • 错标:之前已经被标注是垃圾,但现在重新引用。
  • 重新标记。STW时间一般低于200毫秒。
  • 并发清除。并发清除时,因为用户线程和垃圾线程一起工作,如果CMS线程异常,可能会触发SO单线程执行。程序可能会特别缓慢。

劣势:碎片严重。

总结


主要简单介绍了分代垃圾回收器,特别介绍了cms执行过程,G1留下次再说吧。好了,文章有地方还写的不清晰希望亲们加以指正和点评,喜欢的请点赞加关注哦。点关注,不迷路,我是叫练,边叫边练,公众号叫练】,微信号【jiaolian123abc】。祝大家生活愉快。

最新文章

  1. Autodesk招聘开发咨询顾问(北京或上海),需要内推的扔简历过来啊
  2. [转] 深入探讨C++中的引用
  3. Memcached——非关系型数据库分布式处理
  4. bzoj 1090 [SCOI2003]字符串折叠(区间DP)
  5. 第33条:用EnumMap代替序数索引
  6. Linux下gcc,g++,gdb,scon部分用法笔记
  7. 201521123075 《Java程序设计》第12周学习总结
  8. Cesium 一个导致浏览器内存一直增长的方法
  9. 实验吧 deeeeeeaaaaaadbeeeeeeeeeef-20
  10. Docker防主机意外断电导致容器实例无法驱动解决方案:UPS || write barrier || 上btrfs定期snapshot
  11. HTML Table to Json
  12. git的基本用法——我的日常使用
  13. JS传值中文乱码解决方案
  14. bash-4.2$ bash: /home/test/.bashrc: 权限不够
  15. 六步破解win2008R2登录密码
  16. JAVA基础之訪问控制权限(封装)
  17. 【BZOJ1935/4822】[Shoi2007]Tree 园丁的烦恼/[Cqoi2017]老C的任务 树状数组
  18. 20145303刘俊谦 《Java程序设计》实验四 实验报告
  19. C#中动态调用DLL动态链接库(转)
  20. 2018.12.20 Spring环境如何搭建

热门文章

  1. Elastic Search 原理剖析
  2. Chrome new features preview
  3. 手把手教你gitlab汉化
  4. Spring Boot集成Springfox Swagger3和简单应用
  5. 低功耗蓝牙 ATT/GATT/Service/Characteristic 规格解读
  6. SpringCloud(四):服务注册中心Eureka Eureka高可用集群搭建 Eureka自我保护机制
  7. Course2.1 Graph Paper Programming
  8. Wireguard 全互联模式(full mesh)配置指南
  9. TransactionScope 事务
  10. .NET MVC & Web API Cors让AJAX 实现跨域