当前位置:网站首页>JVM之垃圾回收器
JVM之垃圾回收器
2022-07-02 07:21:00 【吃猫的大鱼】
前言
上篇介绍了JVM垃圾回收算法,经过上篇的铺垫之后本篇重点介绍JVM的GC回收器,主要内容都参考于《深入理解Java虚拟机》。
本篇重点介绍CMS和G1GC,其他回收器会直接一笔带过。
一、常见垃圾回收器
以下是JDK8-JDK9常见的垃圾回收器组合:
从以上图可以得出结论:
- JDK8支持的垃圾回收组合有:Serial+Serial Old,Parallel Scavenge+Parallel Old,CMS+ParNew,Parallel Scavenge+Serial Old,G1 五种组合选择;
- JDK9在JDK8基础上新增了 Serial + CMS,ParNew+Serial Old 两种组合。
其中JDK8默认的GC组合是 Parallel Scavenge+Parallel Old,JDK9默认GC是G1GC.
二、CMS收集器
1.简介
CMS(concurrent mark sweep)收集器是一种以获取最短回收停顿时间为目标的的收集器。
从它的名字(mark sweep)就可以看出来它的是基于标记-清除算法实现的。
2.收集过程
过程相对复杂一些,主要有4部分:
- 初始标记 ,只是标记一下GC Roots能直接关联到的对像,耗时短,会STW;
- 并发标记,从GC Roots的直接关联对象开始遍历整个对象图的过程,耗时长。同用户线程一起执行,不需要停顿。
- 重新标记,增量标记,解决并发标记期间用户线程运行时导致标记变动的对象,耗时较短,会STW(解决的是并发标记时用户线程新增的可回收垃圾);
- 并发清除,清除删掉标记阶段判断已死亡的对象。由于同用户线程一起执行,不需要停顿。
3.优缺点
优点:
并发收集,低停顿。
缺点:
- 由于是并发收集则对处理器资源非常敏感,会占用一部分CPU;
- 基于标记-清除算法实现,存在内存碎片化问题(标记-清除算法问题);
- 无法处理浮动垃圾,并发标记和并发清理阶段用户线程都在运行,期间产生的垃圾只能留给下一次收集,这个就是浮动垃圾。
三、G1收集器
1.简介
G1收集器是垃圾收集器技术发展历史上的里程碑式的成果,它开创了收集器面向于局部收集的设计思路和基于region布局的内存形式(物理分区,逻辑分代)。
值得一提的是JDK8支持G1GC,JDK9默认的垃圾回收器,且CMS沦为了不推荐的垃圾回收器,当做是CMS替代的优化版本。
它衡量标准不再是它属于哪个分代,而是哪块内存中存放的垃圾数量最多,回收收益最大,即Mixed GC模式。
2.收集过程
主要有4个过程:
- 初始标记,标记GC Roots能直接关联到的对象(短暂的STW);
- 并发标记,从GC Roots开始对堆中对象进行可达性分析,递归扫描整个堆找出要回收对象,与用户线程并行执行(不需要停顿,耗时较长);
- 最终标记,增量标记,解决并发标记期间用户线程运行时导致标记变动的对象(较短的STW);
- 筛选标记,负责更新Region的统计数据,对各个Region的回收价值和成本进行排序,根据用户所期望的停顿时间来制定回收计划,可以选择任意多个Region构成回收集,然后把决定回收那一部分Region的存活对象复制到空的region中,再清理掉整个旧region的的全部空间(较长的STW,核心设计,实现了可以设置预计的延迟时间。默认是200ms)。
3.优缺点
优点:
1. 单独使用,不需要组合,参数少,调优成本低;
2. 可以设置预计的停顿时间;
3. 不会有内存碎片化问题(基于标记整理算法来实现的收集器)。
缺点:
1. 需要更多内存支持(分region);
2. 对CPU有要求需要多核(很多并发操作)。
总结
在大内存(>=6G)系统下如果在选择是用CMS和G1推荐使用G1;反之系统小内存(<6G)时由于G1GC分区占空间较多,理论上会比CMS差。
边栏推荐
- 华为游戏初始化init失败,返回错误码907135000
- SPSS做Shapiro-Wilk正态分析
- Flutter环境配置保姆级教程,让doctor一绿到底
- Learn open62541 -- [66] UA_ Generation method of string
- JSP webshell free -- the basis of JSP
- MySQL environment configuration
- Filtering of PCL
- 记录 AttributeError: ‘NoneType‘ object has no attribute ‘nextcall‘
- What is the significance of the college entrance examination
- HDU1228 A + B(map映射)
猜你喜欢
JSP webshell free -- the basis of JSP
4.随机变量
拆解美图SaaS:开着飞机换引擎
From Read and save in bag file Jpg pictures and PCD point cloud
Dialogue Wu Gang: why do I believe in the rise of "big country brands"?
[SUCTF2018]followme
Flutter——Canvas自定义曲线图
Flink submitter
"Talking about podcasts" vol.352 the age of children: breaking the inner scroll, what can we do before high school?
MYSQL环境配置
随机推荐
一招快速实现自定义快应用titlebar
Internet News: Tencent conference application market was officially launched; Soul went to Hong Kong to submit the listing application
Common methods of JS array
【TS】1368- 秒懂 TypeScript 泛型工具类型!
快应用中实现自定义抽屉组件
K-d tree and octree of PCL
MySQL keyword
使用sqlcipher打开加密的sqlite方法
Disassembling Meitu SaaS: driving the plane to change the engine
Beautiful and intelligent, Haval H6 supreme+ makes Yuanxiao travel safer
【AGC】构建服务3-认证服务示例
【快应用】text组件里的文字很多,旁边的div样式会被拉伸如何解决
HDU1236 排名(结构体排序)
Record attributeerror: 'nonetype' object has no attribute 'nextcall‘
Mongodb quickly get started with some simple operations of mongodb command line
(5) Gear control setting of APA scene construction
(五)APA场景搭建之挡位控制设置
2. Hacking lab script off [detailed writeup]
数据库字典Navicat自动生成版本
Overview of integrated learning