相同点:

1.CMS和G1均有“初始标记”阶段,两者初始标记的方案一致(均会stw)

2.CMS和G1均有“并发标记”阶段,两者并发标记阶段均使用三色标记法

3.均使用SerialGC进行兜底(当对象分配不下会触发兜底策略)

4.均包含分代思想

5.G1发生MixedGC和CMS的垃圾回收流程类似

6.均会发生内存伪共享问题

背景:如果不同线程对对象的引用的更新操作,恰好位于同一个64kb区域(cpu的缓存行大小为128字节,1个卡表项1字节,1个卡表页512字节。即128 * 1 * 512)这将导致同事更新卡表的同一个缓存行,从而造成缓存行的写回,无效同步,间接影响程序性能

解决方案:写屏障添加条件,先检查卡表标记,只有卡表项未被标记过脏卡,才将状态改为dirty

7.均使用卡表来解决跨代引用问题

不同点:

1.设计初衷不一致。CMS设计的初衷:最短的STW

2.“并发阶段”针对漏标的情况采用不同的策略。CMS 目前采用了 Incremental Update(增量) 通过 post write-barrier(后置写屏障) 来实现; G1 则采用了 SATB(关注删除引用) 通过 pre write-barrier(前置写屏障) 来实现。(该屏障和内存屏障不是同一概念,此处的屏障是GC独有的)

3.分代的差异性:G1逻辑分代,物理不分代,CMS物理分代(也算存在逻辑分代,卡表逻辑上将老年代分成一个个512的卡页);CMS老年代垃圾回收器

4.G1包含RSet存储其它region中对象到本region的引用(每次给对象赋引用时,需要消耗额外的资源记录到RSet中)

CMS和G1的差异性相关推荐

  1. JVM从入门到精通(十):垃圾回收算法串讲:CMS,G1,三色标记算法

    CMS 并发回收,工作线程和GC线程同时进行,暂停时间短 老年代 分为 四个阶段: 初始标记:需要STW,因为初始的垃圾并不多,因此耗费的时间不长 并发标记:垃圾回收线程和工作线程同时执行.一边产生垃 ...

  2. 【重难点】【JVM 03】CMS、G1、ZGC

    [重难点][JVM 03]CMS.G1.ZGC 文章目录 [重难点][JVM 03]CMS.G1.ZGC 一.CMS 1.介绍 2.优点 3.缺点 二.G1 1.介绍 2.优势 3.应用场景 4.Re ...

  3. 垃圾回收器——CMS与G1

    垃圾回收器--CMS与G1 查看JVM所有的参数及默认值 什么是垃圾回收,为什么要有垃圾回收 根可达中的根 安全点与安全区间 内存分代划分,为什么要有内存分代划分 jstat CMS垃圾回收器 CMS ...

  4. 弄明白CMS和G1,就靠这一篇了

    在开始介绍CMS和G1前,我们可以剧透几点: 根据不同分代的特点,收集器可能不同.有些收集器可以同时用于新生代和老年代,而有些时候,则需要分别为新生代或老年代选用合适的收集器.一般来说,新生代收集器的 ...

  5. 别总说CMS、G1,该聊聊ZGC了

    在开始介绍前,我们可以剧透几点: 根据不同分代的特点,收集器可能不同.有些收集器可以同时用于新生代和老年代,而有些时候,则需要分别为新生代或老年代选用合适的收集器.一般来说,新生代收集器的收集频率较高 ...

  6. CMS、G1垃圾收集器详解

    CMS垃圾收集器 基本上只能用在老年代,很长一段时间是ParNew(新生代)搭配CMS(老年代)来使用的. 收集过程大概会分为如下4个过程: 1.初始标记: 暂停所有的其他线程,并记录下gc root ...

  7. java g1 详解_JAVA垃圾收集算法总结以及CMS、G1算法详解

    前段时间由于工作原因一直很忙,上周项目验收后时间终于空闲下来,博客也有好几个月没有更新了,趁着还有几天放假,借这个机会写点东西:网上也有很多人写过Java垃圾收集器,特别现在主流比较火的CMS和G1算 ...

  8. cms 和 g1的主要区别

    cms和g1的主要区别 1.cms是内存分布式分代连续的,也就是新生代一块连续的区间,年老代一块连续的区间,而g1是把堆分成了2048个region,每个区域region可以作为新生代也可以作为年老代 ...

  9. 双/三色标记法的垃圾回收(GC)原理解析和缺陷解决方案(Go,Lua以及jvm的CMS和G1垃圾回收器中使用的回收算法)

    标记-清除算法 go和lua虚拟机以及jvm的CMS和G1垃圾回收器的回收算法的思想均来自于标记-清除算法(Mark-Sweep),它们的gc有重要的两部分: 1.从根节点遍历所有对象,如果可达到,则 ...

最新文章

  1. Apache遇到的问题:APR not found
  2. 基于JDK 1.8 的 Java 容器UML图
  3. 输入法之核心词典构建
  4. angular2、ng2 http get post 传参
  5. codevs 1230 元素查找
  6. log4j2.xml
  7. uva1347Tour
  8. 大学学计算机的有作业吗,有没有电脑高手,大学计算机专业的作业
  9. 新华字典java_新华字典查询示例代码
  10. 互联网早报 | 3月16日 星期二 | 微信AI直播助理开放内测;汽车之家港交所挂牌上市;美团App内测“群聊”功能...
  11. 【Ubuntu日常技巧】VirtualBox多网卡路由配置,保障虚拟机连接上外网
  12. python2.0 s12 day4
  13. 20155313 2016-2017-2 《Java程序设计》第十周学习总结
  14. Linux中的ls命令详细使用
  15. Java自定义组合控件
  16. 如何生成密钥文件Snk
  17. aardio 模拟键盘按键,实现msgbox对话框自动关闭
  18. 实操:基于LNMP搭建zabbix监控
  19. Toast类实现消息提示框
  20. 实战-PHP远程代码执行漏洞

热门文章

  1. asp和mysql分页代码
  2. 从莉莉丝游戏的战略布局与设计角度,探究《剑与远征》的火爆原因
  3. freeswitch cdr odbc
  4. Student(5)——新增和修改班级信息
  5. 为什么区块链账本不可篡改?
  6. Django框架学习【mysql】
  7. 代理推广小程序思路整理
  8. scala相关操作(三)
  9. keil MDK ARM7 问题汇总
  10. 自定义Excle表头