导图社区 如何选择垃圾回收器
这是一篇关于如何选择垃圾回收器的思维导图,包括:考虑的三个因素、cms、g1、cms和g1对比、g1和cms的选择。
这是一篇关于监控告警的思维导图。包含自动化大盘创建,自动化更新大盘,智能阈值,智能警告等内容。
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
CMS和G1的如何选择
考虑三个因素
吞吐量
停顿时间
硬件配置
内存
4-6g以下,考虑cms
6g以上考虑g1
多核
jdk版本
cms
并发标记清除收集器是一种以获取最短回收停顿时间为目标的垃圾回收器
关注响应速度,希望停顿时间尽可能短,给用户好的体验
标记清除算法
回收过程,四个步骤
初始标记
stw
并发标记
重新标记
并发清除
优点
并发收集
低停顿
缺点
cpu敏感,并发处理,核数越多越好
并发标记阶段产生的浮动垃圾无法处理
主要是三色标记法多标导致的
子主题
标记清除算法的弊端,内存碎片
g1
思路很重要
面向局部收集
cms要么收集整个年轻代,要么整个老年代,要么整个堆
g1回收集概念,回收局部
衡量标准不是哪个分代,而是哪块内存存放的垃圾多,回收效益最大,这就是混合gc
基于region的内存布局
名字全称garbage first
优先清理垃圾最多的region
目标
停顿时间可预测
停顿预测模型
标记整理算法,复制算法
过程,四个步骤
只标记gc root能直接关联的对象
染成灰色
可达性分析,递归扫描整个队里的对象图,找出要回收的对象,与业务线程并发执行
最钟标记
暂停用户线程,处理并发标记阶段的引用关系
筛选回收
更新region的统计数据,对各个region的回收价值和成本排序,根据用户所设置的期望停顿时间来制定回收计划,将region存活的对象移动到空region中,在清理掉旧的region全部空间。
会暂停用户线程
总结
除了并发标记阶段,其他步骤都需要暂停用户线程
非纯粹的追求低延迟
追求延迟可控
一个重要思想诞生,只要回收速度能跟上分配速度就可以,而不是追求收集整个堆
不会有内存碎片问题
为了垃圾收集占用的内存较多
cms和g1对比
从目标对比
cms追求低延迟
g1是追求暂停时间、延迟可控
从算法对比
cms是标记清除算法
g1是标记整理算法,region之间是复制算法
从内存占用对比
cms占用内存空间小
物理分代模型,共享一个卡表记录引用
g1占用额外的内存空间大
每个region都需要一个卡表记录引用关系
从执行负载对比
cms和g1都存在并发标记,与业务线程同时运行
时长不同
动作不同
cms使用写后屏障来更新维护卡表
G1除了使用写后屏障来更新维护卡表之外,还需要写前屏障处理跟踪指针变化情况
g1和cms的选择
一看版本
二看资源
三看吞吐