GC收集器
新生代收集器
Serial New
- 单线程收集器,工作时必须暂停其他线程;
- 简单高效,没有线程交互开销;
- 基于复制算法;
Parallel New
- 对Serial的改进,多线程;
- CPU数量<4时,性能并不比Serial好;
- CMS新生代的默认收集器;
- 基于复制算法;
Parallel Scavenge
- 复制算法;
- 更关注吞吐量,吞吐量 = 运行用户代码时间 / (运行用户代码时间 + 垃圾收集时间);
- 不能和CMS配合工作
老年代收集器
Serial Old
- 标记-整理算法
- 单线程,性能不行;
Parallel Old
- Serial Old的多线程版本;
- 标记-整理算法;
CMS Concurrent Mark Sweep
- 标记-清除算法;
- 并发收集器;
缺点 - 产生内存碎片较多;
- 产生浮动垃圾;
- 并发执行,占用CPU;
CMS收集过程
- 初始标记:stop the world,只是做GC Root可达性的初始标记
- 并发标记:耗时较长,但可以与用户线程并发执行;
- 重新标记:stop the world,标记2中变动的对象;
- 并发清除:耗时较长,但可以与用户线程并发执行;
非分代收集器
G1 Garbage First
- 新生代和老年代由一个个region区组成;
- 可以独立完成所有区域的内存回收;
- 标记-整理算法;
G1的工作过程:
- 初始标记:同CMS;
- 并发标记:耗时较长,分析GC Root到所有对象的可达性。JVM是使用Remembered Set保存了对象引用的调用信息,在可达性分析的时候只需要同时遍历remembered set;
- 最终标记:通过Remembered Set日志来记录并发标记时没有记录到的用户线程,在这个阶段将改变合并到Remembered Set中,完成最终标记。
- 筛选清除:通过标记整理的算法,根据用户配置的回收时间,和维护的优先级列表,优先收集价值最大的region。收集阶段是基于标记-整理和复制算法;
ZGC
- JDK11中发布的最新垃圾收集器;
- 没有分代概念、时间可控,超大堆;
- 几乎所有阶段都是并发执行;
- 动态的创建销毁Region
回收过程
- 初始停顿标记:停顿JVM,标记存活对象;
- 并发标记:并发递归标记其他对象;
- 移动对象:找到过期对象,移动到新的Region,然后压缩老的Region;
- 修正指针:将指针指向新的地址;
GC收集器的更多相关文章
- 学习JVM--垃圾回收(二)GC收集器
1. 前言 在上一篇文章中,介绍了JVM中垃圾回收的原理和算法.介绍了通过引用计数和对象可达性分析的算法来筛选出已经没有使用的对象,然后介绍了垃圾收集器中使用的三种收集算法:标记-清除.标记-整理.标 ...
- JDK1.7 Update14 HotSpot虚拟机GC收集器
在测试服务器上使用如下命令可以查看当前使用的 GC收集器,当然不止这一个命令可以看到,还有其他一些方式 第三列”=”表示第四列是参数的默认值,而”:=” 表明了参数被用户或者JVM赋值了 [csii@ ...
- GC收集器种类
转载:https://wangkang007.gitbooks.io/jvm/content/la_ji_shou_ji_qi.html 收集器 1.1 Serial(串行)收集器 Serial收集器 ...
- A7. JVM 垃圾回收收集器(GC 收集器)
[概述] 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现.Java 虚拟机规范中对垃圾收集器应该如何实现没有任何规定,因此不同的厂商.不同版本的虚拟机所提供的垃圾处理器都可能会 ...
- JVM GC系列 — GC收集器
一.前言 前文学习了各种GC回收算法,掌握了GC回收的原理,但是真正的GC实现却尤为复杂,本篇文章将主要介绍各种GC收集器. 目前主流的HotSpot VM支持多种虚拟机,这些虚拟机也体现了GC的发展 ...
- java虚拟机学习总结之GC回收算法与GC收集器
GC回收算法 1.标记清除算法分为标记阶段和清除阶段标记阶段:通过特定的判断方式找出无用的对象实例并将其标记清除阶段:将已标记的对象所占用的内存回收缺点:运行多次以后容易产生空间碎片,当需要一整段连续 ...
- Java GC收集器配置说明
根据Java GC收集器具体分类,我们可以看出JVM根据需求不同提供了三种选择:串行收集器.并行收集器.并发收集器. 串行收集器只适用于小数据量的情况,我们主要了解一下并行收集器和并发收集器.默认情况 ...
- Serial,Parallel,CMS,G1四大GC收集器特点小结
1.Serial收集器一个单线程的收集器,在进行垃圾收集时候,必须暂停其他所有的工作线程直到它收集结束.特点:CPU利用率最高,停顿时间即用户等待时间比较长.适用场景:小型应用通过JVM参数-XX:+ ...
- 转Serial,Parallel,CMS,G1四大GC收集器特点小结
转 https://blog.csdn.net/u013812939/article/details/48782343 1.Serial收集器 一个单线程的收集器,在进行垃圾收集时候,必须暂停其他所有 ...
随机推荐
- 和jz姐姐的vp记录
即使如此,jz姐姐也漂亮的取得了胜利 有些懒得写直接口胡,所以代码也不一定有 暂时停更了 2015-2016 Petrozavodsk Winter Training Camp, Makoto rng ...
- shell脚本编程基础之函数
函数 作用:代码重用 定义函数: 方法1: function FUNCTION_NAME { #函数名和定义变量名一样,只能包含数字字母下划线,并且不能以数字开头 command } 方法2: FUN ...
- 京东购物车的Java架构实现及原理!
今天来写一下关于购物车的东西, 这里首先抛出四个问题: 1)用户没登陆用户名和密码,添加商品, 关闭浏览器再打开后 不登录用户名和密码 问:购物车商品还在吗? 2)用户登陆了用户名密码,添加商品,关闭 ...
- OpenFOAM计算结果转换到CFD-Post当中处理
我们编写如下的Python代码 源代码:
- gitignore文件示例
/target/ !.mvn/wrapper/maven-wrapper.jar ### STS ### .apt_generated .classpath .factorypath .project ...
- SpringMVC @SessionAttribute 使用说明
百度搜索 @SessionAttribute 这一句绝大多数文章中不存在: 如果Model中没有name参数,而session中存在一个name参数,那么SessionAttribute会讲这个参数塞 ...
- pycharm设置代码行的长度为79字符(PEP8)
pycharm设置代码行的长度为79字符
- odoo开发笔记 -- 多个子类继承同一个父类方法的执行顺序
场景描述: odoo模块化开发的架构理念,科学&高效, 可以让很多业务场景,尽可能松耦合:让开发人员的主要精力,关注在当前的业务逻辑: 所谓「前人栽树,后人乘凉」,模块整体好比一棵大树, 开发 ...
- Spring cloud微服务安全实战-7-5配置grafana图表及报警
先过一下grafana的配置文件 grafana的配置文件. 右键服务的地址.发信人 账号 和面等 配置要连到prometheus上. 登陆的密码是多少,第二行是不允许用户注册. dashboard. ...
- [译]为什么在__new __()后总是调用__init __()?
原文来源: https://stackoverflow.com/questions/674304/why-is-init-always-called-after-new 需要控制新实例的创建时,请使用 ...