本随笔是《深刻理解Java虚拟机 JVM高级特性与最佳实践》读书笔记。算法
1.JDK1.7以后的HotSpot虚拟机所包含的全部收集器以下:并发
解读:布局
1. 总共有7种垃圾收集器学习
2.Serial,ParNew,Parallel Scavenge 负责堆年轻代中的内存回收网站
3.Serial Old,CMS,Parallel Old 负责堆老年代中的内存回收spa
4.G1分代回收,能独立管理整个GC堆线程
5.两个收集器中间存在连线的,说明可以配合工做server
各个收集器对比对象
名称blog |
收集算法 |
工做区域 |
可配合对象 |
线程 |
并发 |
适用场合 |
优缺点 |
Serial |
复制算法 |
新生代 |
CMS; Serial Old |
单 |
否 |
单CPU; Client模式下 |
缺:stop the world; 优:简单高效,没有线程交互开销,专一于GC; |
ParNew |
复制算法 |
新生代 |
CMS; Serial Old |
多 |
是 |
多CPU; Server模式下 |
缺:stop the world 优:并行并发GC |
Parallel Scavenge |
复制算法 |
新生代 |
Serial Old; Parallel Scavenge |
多 |
是 |
吞吐量控制,Client,server都可以 |
主要关注吞吐量,经过吞吐量的设置控制停顿时间,适应不一样的场景 |
Serial Old |
标记整理算法 |
老年代 |
Serial,ParNew,Parallel Scavenge |
单 |
否 |
主要Client模式下 |
缺:stop the world |
Parallel Old |
复制算法(Parallel Scavenge老年代版本) |
老年代 |
Parallel Scavenge |
多 |
是 |
吞吐量控制,Client,server都可以 |
主要关注吞吐量,经过吞吐量的设置控制停顿时间,适应不一样的场景 |
CMS(Concurretn Mark Sweep) |
标记清除算法 |
老年代 |
Serial,ParNew, Serial Old是其备选方案 |
多 |
是 |
互联网站;B/S系统服务端 |
缺:CPU资源敏感,没法处理浮动垃圾,产生大量内存碎片 优:并发收集,低停顿 |
G1 |
总体基于标记整理算法 |
新生代&老年代 |
|
多 |
是 |
面向服务端应用 |
优:并行与并发, 分代收集,空间整合(标记整理算法),可预测停顿 |
名词解释
并行(Parallel):只多条垃圾收集线程并行工做,但此时用户线程处于等待状态,也就是stop the world.
并发(Concurrent):只用户线程与垃圾收集线程同时执行(但不必定是并行的,可能会交替执行),用户程序在继续运行,而垃圾收集程序运行于另外一个CPU.
Garbage First收集器
现最流行的是G1(Garbage First)收集器,也是当今收集器技术发展的最前沿成果之一,现重点学习一下。
1.优势
2.特色
3.须要思考的问题
G1把内存化整为零,将整个堆划分为多个Region。那么垃圾收集真的就是以Region为单位进行的吗?听起来瓜熟蒂落,仔细想一想其实不是,Region不多是孤立的。一个对象分配在某个Region中,但它并非只能被本Region中的其余对象引用,而是能够为整个堆中的任意其余对象引用。那么在利用可达性分析判断对象是否存活时,岂不是要扫描整个Java堆才能保证准确性?此类问题在其余收集器中也会出现,新生代年老代一样面临此类问题。
此类问题的JVM采用Remembered Set来避免全堆扫描。(包括新生代年老代的解决思路)。Remembered Set工做机制,详见 《深刻理解Java虚拟机 JVM高级特性与最佳实践》第三章3.5.7
4.运做步骤