CMS和G1的差异性
相同点:
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的差异性相关推荐
- JVM从入门到精通(十):垃圾回收算法串讲:CMS,G1,三色标记算法
CMS 并发回收,工作线程和GC线程同时进行,暂停时间短 老年代 分为 四个阶段: 初始标记:需要STW,因为初始的垃圾并不多,因此耗费的时间不长 并发标记:垃圾回收线程和工作线程同时执行.一边产生垃 ...
- 【重难点】【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 ...
- 垃圾回收器——CMS与G1
垃圾回收器--CMS与G1 查看JVM所有的参数及默认值 什么是垃圾回收,为什么要有垃圾回收 根可达中的根 安全点与安全区间 内存分代划分,为什么要有内存分代划分 jstat CMS垃圾回收器 CMS ...
- 弄明白CMS和G1,就靠这一篇了
在开始介绍CMS和G1前,我们可以剧透几点: 根据不同分代的特点,收集器可能不同.有些收集器可以同时用于新生代和老年代,而有些时候,则需要分别为新生代或老年代选用合适的收集器.一般来说,新生代收集器的 ...
- 别总说CMS、G1,该聊聊ZGC了
在开始介绍前,我们可以剧透几点: 根据不同分代的特点,收集器可能不同.有些收集器可以同时用于新生代和老年代,而有些时候,则需要分别为新生代或老年代选用合适的收集器.一般来说,新生代收集器的收集频率较高 ...
- CMS、G1垃圾收集器详解
CMS垃圾收集器 基本上只能用在老年代,很长一段时间是ParNew(新生代)搭配CMS(老年代)来使用的. 收集过程大概会分为如下4个过程: 1.初始标记: 暂停所有的其他线程,并记录下gc root ...
- java g1 详解_JAVA垃圾收集算法总结以及CMS、G1算法详解
前段时间由于工作原因一直很忙,上周项目验收后时间终于空闲下来,博客也有好几个月没有更新了,趁着还有几天放假,借这个机会写点东西:网上也有很多人写过Java垃圾收集器,特别现在主流比较火的CMS和G1算 ...
- cms 和 g1的主要区别
cms和g1的主要区别 1.cms是内存分布式分代连续的,也就是新生代一块连续的区间,年老代一块连续的区间,而g1是把堆分成了2048个region,每个区域region可以作为新生代也可以作为年老代 ...
- 双/三色标记法的垃圾回收(GC)原理解析和缺陷解决方案(Go,Lua以及jvm的CMS和G1垃圾回收器中使用的回收算法)
标记-清除算法 go和lua虚拟机以及jvm的CMS和G1垃圾回收器的回收算法的思想均来自于标记-清除算法(Mark-Sweep),它们的gc有重要的两部分: 1.从根节点遍历所有对象,如果可达到,则 ...
最新文章
- 两院院士评选2020年中国、世界十大科技进展揭晓,「机器学习模拟上亿原子」等入选 | AI日报...
- [转]ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调
- java 微信请求_Java web微信请求拦截器(微信公众号开发)
- SDO_Geometry 相关学习
- 自定义alert提示框
- vue ref 属性
- x86_64-linux-gnu/libgdk-x11-2.0.so: error adding symbols: DSO missing from command line
- 使用burp对Tomcat 弱密码爆破
- linux使用USB转串口驱动设置
- Linux16T以上硬盘分区,centos 2T以上硬盘 或者大于超过16T分区和格式化
- Spring Cloud源码阅读(一)
- 规格书搜索网站分享和体验
- ICPR MTWI 2018 挑战赛二:网络图像的文本检测
- java 堆内存结构_基于JDK1.8的JVM 内存结构【JVM篇三】
- 魔法密文 Writeup| DASCTF Oct X 吉林工师
- sonicwall防火墙快速上网配置
- 食品行业MES解决方案
- js室内地图开发_使用JS+Three.js+Echart开发商场室内地图客流信息统计功能
- 使用JS代码禁止某些地区用户访问网站
- 计算机管理工具怎么设置,日程安排管理工具敬业签电脑版如何更改默认标签分类?...