《深入理解 Java 虚拟机》学习 -- 垃圾收集器
《深入理解 Java 虚拟机》学习 -- 垃圾收集器
1. Serial 收集器(新生代)
含义:
单线程收集器。
缺点:
进行垃圾收集时,必须暂停其他所有的工作线程。
优点:
简单而高效。
示例:

2. ParNew 收集器(新生代)
含义:
Serial 收集器的多线程版本,使用多条线程进行垃圾收集。
示例:

3. Parallel Scavenge 收集器(新生代)
含义:
Parallel Scavenge 收集器的目标是达到一个可控制的吞吐量。而 CMS 等收集器的关注点则是尽可能地缩短垃圾收集时用户线程的停顿时间。
吞吐量:
吞吐量 = 运行用户代码时间 / (运行用户代码时间 + 垃圾收集时间)
作用:
- 停顿时间越短就越适合需要与用户交互的程序,良好的响应速度能提升用户的体验
- 高吞吐量则可以最高效率地利用 CPU 时间,尽快地完成程序的运算任务,主要使用在后台运算而不需要太多交互的任务。
4. Serial Old 收集器(老年代)
含义:
Serial Old 是 Serial 收集器的老年代版本,它同样是一个单线程收集器,使用”标记 - 整理“ 算法。
示例:

5. Parallel Old 收集器(老年代)
含义:
Parallel Old 是 Parallel Scavenge 收集器的老年代版本,使用多线程和 ”标记 - 整理“ 算法。
示例:

6. CMS 收集器(重要)
含义:
CMS 收集器是一种以获取最短回收停顿时间为目标的收集器。基于 ”标记 - 清除“ 算法。
运行过程
- 初始标记
- 并发标记
- 重新标记
- 并发清除
注意:
- 初始标记,重新标记这两个步骤仍然需要暂停其他所有的工作线程
- 初始标记仅仅只是标记一下 GC Roots 能直接关联到的对象,速度很快
- 并发标记阶段就是进行 GC Roots Tracing 的过程
- 重新标记是为了修正并发标记期间,因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录
优点:
并发收集,低停顿。
缺点:
- CMS 收集器对 CPU 资源非常敏感
- CMS 收集器无法处理浮动垃圾
- 基于 ”标记 - 清除“ 算法标记结束时会产生大量空间碎片
示例:

7. G1 收集器(重要)
含义:
- G1 收集器是基于 ”标记 - 整理" 算法实现的收集器
- G1 收集器可以非常精确地控制停顿
低停顿的原理:
G1 将整个 Java 堆(包括新生代、老年代)划分为多个大小固定的独立区域,并且跟踪这些区域里面的垃圾堆积程度,在后台维护一个优先列表,每次根据允许的收集时间,优先回收垃圾最多的区域。
8. JVM 默认的垃圾收集器
jdk1.7 默认垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代)
jdk1.8 默认垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代)
jdk1.9 默认垃圾收集器G1
-XX:+PrintCommandLineFlagsjvm :参数可查看默认设置收集器类型
-XX:+PrintGCDetails :亦可通过打印的GC日志的新生代、老年代名称判断
《深入理解 Java 虚拟机》学习 -- 垃圾收集器的更多相关文章
- 深入理解java虚拟机之垃圾收集器
Java一个重要的优势就是通过垃圾管理器GC (Garbage Collection)自动管理和回收内存,程序员无需通过调用方法来释放内存.也因此很好多的程序员可能会认为Java程序不会出现内存泄漏的 ...
- 深入理解Java虚拟机:垃圾收集器与内存分配策略
目录 3.2 对象已死吗 判断一个对象是否可被回收 引用类型 finalize() 回收方法区 3.3. 垃圾收集算法 1.Mark-Sweep(标记-清除)算法 2.Copying(复制)算法 3. ...
- 《深入理解Java虚拟机》垃圾收集器
说起垃圾收集(Garbage Collection,GC),大部分人都把这项技术当做Java语言的伴生产物.事实上,GC的历史远比Java久远,1960年诞生于MIT的Lisp是第一门真正使用内存动态 ...
- Java虚拟机学习 - 垃圾收集器
HotSpot JVM收集器 上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器.如果两个收集器之间存在连线,就说明它们可以搭配使用. Serial(串行GC)收集器 Serial收集 ...
- 《深入理解Java虚拟机》——垃圾收集器与内存分配策略
GC需要完成: 哪些内存需要回收 什么时候回收 如何回收 如何确定对象不再使用 引用计数算法 给对象添加一个引用计数器,当有一个地方引用它时,计数器值进行加1操作:当引用失效时,计数器值进行减1操作: ...
- Java虚拟机学习 - 垃圾收集器 (4)
HotSpot JVM收集器 上面有7中收集器,分为两块,上面为新生代收集器,下面是老年代收集器.如果两个收集器之间存在连线,就说明它们可以搭配使用. Serial(串行GC)收集器 Serial收集 ...
- 深入理解Java虚拟机笔记——垃圾收集器与内存分配策略
目录 判断对象是否死亡 引用计数器算法 可达性分析算法 各种引用 回收方法区 垃圾收集算法 标记-清除算法 复制算法 标记-整理算法 分代收集算法 HotSpot算法实现 枚举根节点 GC停顿(Sto ...
- 深入理解java虚拟机(3)垃圾收集器与内存分配策略
一.根搜索算法: (1)定义:通过一系列名为"GC Roots"的对象作为起点,从这些起点开始向下搜索,搜索走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连的时 ...
- 深入理解Java虚拟机学习笔记(二)-----垃圾收集器与内存分配策略
写在前面 本节常见面试题: 如何判断对象是否死亡(两种方法). 简单的介绍一下强引用.软引用.弱引用.虚引用(虚引用与软引用和弱引用的区别.使用软引用能带来的好处). 如何判断一个常量是废弃常量 如何 ...
- 深入理解Java虚拟机---学习感悟以及笔记
一.为什么要学习Java虚拟机? 这里我们使用举例来说明为什么要学习Java虚拟机,其实这个问题就和为什么要学习数据结构和算法是一个道理,工欲善其事,必先利其器.曾经的我经常害怕处理内存溢 ...
随机推荐
- Leetcode题目48.旋转图像(中等)
题目描述: 给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转图像. 示例 1 ...
- css 能改变input type radio和checkbox 圆圈或方框的大小
把input隐藏,外面套label,再里面加个span,样式写在span上,让label覆盖在span上面,js去改active的class <label for="remember& ...
- mysql主从复制原理及步骤
原理: 1master开启bin-log功能,日志文件用于记录数据库的读写增删2需要开启3个线程,master IO线程,slave开启 IO线程 SQL线程,3Slave 通过IO线程连接maste ...
- 线性dp,分层图思想
题目大意:给你一串数字,一串运算符,求递推用完运算符时答案的最大值----->线性dp dp[i][j] i表示所用数字的个数 j表示所用字符的个数 分层图思想 所有字符必须用完 所以取最后 ...
- Elasticsearch6.5.1破解x-pack,设置密码并使用head插件登陆。
#没有许可证的es无法持久的设置密码,而且使用一段时间后会过期,过期后,一些功能无法被使用,例如head插件无法看到es状态. 下图是过期的es的状态,可通过此url查看:http://ip:port ...
- [实战]扩展一个定制的sentinel JdbcDataSource
Sentinel是今年阿里开源的高可用防护的流量管理框架. git地址:https://github.com/alibaba/Sentinel wiki:https://github.com/alib ...
- 前端知识点回顾——Javascript篇(二)
JavaScript的解析顺序 第一阶段:编译期 寻找关键字声明的变量.函数声明的变量,同时会对变量进行作用域的绑定 var声明的变量,在编译期会赋一个默认值undefined,变量提升的特性. ES ...
- Centos7 部署.Net Core+Nginx+Supervisor
1.安装.Net Core SDK 1.1. 在安装.NET之前,您需要注册Microsoft密钥,注册产品存储库并安装所需的依赖项.这只需要每台机器完成一次. sudo rpm -Uvh https ...
- Rose的四种视图模型
用例视图 用例视图中包括了系统中的所有参与者.用例和用例图,必要时还可以在用例视图中添加顺序图.活动图等 逻辑视图 逻辑系统关注系统是如何实现用例中所描述的功能的,主要是对系统功能性需求提供支持,即为 ...
- delphi stringgrid导出为excel
procedure TLiYQBYJL.btnBYJLTJDCClick(Sender: TObject); var ExcelApp, workbook, sheet: Variant; col, ...