垃圾收集器
2018-01-06 20:18
120 查看
参考:《深入理解Java虚拟机》第3章(《网页版图书》)、《Java虚拟机规范(JavaSE7)》
1、Serial收集器
2、ParNew收集器
3、Parallel Scavenge收集器
4、Serial Old收集器
5、Parallel Old收集器
6、CMS收集器
7、G1收集器
垃圾收集算法是方法论,垃圾收集器是具体实现。
HotSpot虚拟机团队一直致力于减少因回收导致的停顿。到1.7它依然是JVM client模式下的收集器。优点是简单高效。用户桌面场景中,分给虚拟机管理的内存一般不大,所以停顿时间一般几十毫秒。
它是许多server模式下首选新生代收集器。其中一个与性能无关的原因是,除了Serial,只有它能配合CMS收集器。
分为4个步骤:1、初始标记 Stop The World,标记GC Roots能直接关联到的对象,速度很快。2、并发标记 进行GC Roots Tracing。3、重新标记 Stop The World,修正并发标记,时间:初始 < 重新 < 并发4、并发清除 整个回收过程种耗时最长的并发标记和并发清除是与用户线程一起并发执行的。
缺点:1、面向并发设计,对CPU资源敏感2、无法处理浮动垃圾(GC时产生的)3、标记-清除会有空间碎片
CMS失败会触发Full GC;剩余空间大,但是没有足够连续空间,分配大对象失败,也会触发Full GC。
特点:1、并行与并发 2、分代收集3、空间整合 标记-整理4、可预测的停顿
步骤:
(1)初始标记 标记GCR能关联到的对象,时间短
(2)并发标记 可达性分析,耗时长
(3)最终标记 修正
(4)筛选标记 一般停顿执行,因为只是回收部分区域
1、Serial收集器
2、ParNew收集器
3、Parallel Scavenge收集器
4、Serial Old收集器
5、Parallel Old收集器
6、CMS收集器
7、G1收集器
垃圾收集算法是方法论,垃圾收集器是具体实现。
1、Serial收集器
Serial ['sɪərɪəl] 是最基本、发展历史最悠久的收集器。是一个单线程收集器,它工作时,必须暂停其他所有的工作线程(Stop The World)。HotSpot虚拟机团队一直致力于减少因回收导致的停顿。到1.7它依然是JVM client模式下的收集器。优点是简单高效。用户桌面场景中,分给虚拟机管理的内存一般不大,所以停顿时间一般几十毫秒。
2、ParNew收集器
ParNew [pɑː] 是Serial的多线程版。它是许多server模式下首选新生代收集器。其中一个与性能无关的原因是,除了Serial,只有它能配合CMS收集器。
3、Parallel Scavenge收集器
['pærəlel] ['skævɪn(d)ʒ] 新生代、复制算法、多线程的收集器,类似ParNew。其目标是达到一个可控制的吞吐量。牺牲吞吐量和新生代空间就可以缩短GC停顿时间,适合与用户交互频繁的场景。高吞吐量可以高效利用CPU时间,尽快完成运算任务,适合在后台运算的场景。其可根据运行情况,动态调整以提供最合适的停顿时间或者最大吞吐量。参数有:吞吐量参数、开启动态调整参数4、Serial Old收集器
使用标记-整理算法。主要用在client模式下。在server下,①1.5之前搭配Parallel Scavenge使用;②作为CMS的后备方案。5、Parallel Old收集器
标记-整理、Parallel Scavenge的老年代版本。6、CMS收集器
MS:Mark Sweep 标记-清除。目标:获得最短的回收停顿时间。分为4个步骤:1、初始标记 Stop The World,标记GC Roots能直接关联到的对象,速度很快。2、并发标记 进行GC Roots Tracing。3、重新标记 Stop The World,修正并发标记,时间:初始 < 重新 < 并发4、并发清除 整个回收过程种耗时最长的并发标记和并发清除是与用户线程一起并发执行的。
缺点:1、面向并发设计,对CPU资源敏感2、无法处理浮动垃圾(GC时产生的)3、标记-清除会有空间碎片
CMS失败会触发Full GC;剩余空间大,但是没有足够连续空间,分配大对象失败,也会触发Full GC。
7、G1收集器
将java堆分为多个大小相等的独立区域(Region),不再是物理隔离的,不需要连续的。优先回收价值最大的Region。使用Remembered Set来避免全堆扫描。特点:1、并行与并发 2、分代收集3、空间整合 标记-整理4、可预测的停顿
步骤:
(1)初始标记 标记GCR能关联到的对象,时间短
(2)并发标记 可达性分析,耗时长
(3)最终标记 修正
(4)筛选标记 一般停顿执行,因为只是回收部分区域
相关文章推荐
- Java虚拟机垃圾回收(三) 7种垃圾收集器:主要特点 应用场景 设置参数 基本运行原理
- JVM垃圾收集器异同
- java垃圾收集器
- javascript 基础 垃圾收集
- (译)可视化垃圾收集(GC)算法
- 垃圾收集器
- 《深入理解java虚拟机》学习笔记四/垃圾收集器GC学习/一
- 【004】【JVM——垃圾收集算法】
- 编写你的第一个垃圾收集器
- JAVA中垃圾收集哭泣相对于以前的语言有什么优势?
- 200 行 C 代码编写你的第一个垃圾收集器
- JVM结构、内存分配、垃圾回收算法、垃圾收集器
- JVM垃圾收集 & Dalvik垃圾收集资料
- java虚拟机之垃圾收集器、内存分配与回收策略、GC都干了些什么
- 深入理解java虚拟机【Java虚拟机垃圾收集器】
- JVM垃圾收集
- elasticsearch了解垃圾收集器
- Spark学习之路 (十四)SparkCore的调优之资源调优JVM的GC垃圾收集器
- 垃圾收集机制(Garbage Collection)批判
- [读书笔记]JVM的垃圾收集算法