1.垃圾收集器有哪几种
2.每种垃圾收集器的特点
3.总结
(很多人学习会有这样一个现象,对于一个新内容,上网一搜,一大页,看了就晕,然后就失去学习的动力。本章其实很繁琐,我用最简单的语言把各收集器大致说明,想知道更详细的细节可以去其他帖子搜索,网上一搜一大堆。本章的作用仅限于让大家知道有这几种收集器,以及他们最基本的一些特点)
1.垃圾收集器有7种:
Serial收集器
ParNew收集器
Parallel Scavency收集器
Serial Old收集器
Parallel Old收集器
CMS收集器
G1收集器
2.每种垃圾收集器的特点
(1).Serial收集器
特点:单线程,作用于新生代,常用于Clilent端,复制算法
(2).ParNew收集器
特点:多线程,常用于Server端新生代,复制算法
(3).Parallel Scavency收集器
特点:多线程,作用于新生代,复制算法,吞吐量优先
(4).Serial Old收集器
特点:单线程,作用于老年代,常用于Client端,标记整理算法。
在JDK1.5及之前配合Parallel Scavency使用。
还可作为CMS的备选方案
(5).Parallel Old收集器
特点:多线程,作用于老年代,标记整理算法。
从JDK1.6开始,配合Parallel Scavency形成一套完整的吞吐量优先的回收方案
(6).CMS收集器
特点:多线程,标记清除,以最短回收停顿时间为目标
如何运行:
1).初始标记
2).并发标记
3).重新标记
4).并发清除
缺点:
1).对CPU资源敏感
2).浮动垃圾没法清除
3).因为是标记清除,所以存在碎片
(7).G1收集器
特点:多线程,标记整理,面向Server端,并发和并行,分代收集,可预测的停顿时间
如何运行:
1).初始标记
2).并发标记
3).最终标记
4).筛选回收
原理:
在G1中没有物理上的新生代和老年代的概念,他把堆划分为多个Region,维护了一张表记录哪个Region的清空收益比较高,哪个高就去清空哪个
3.总结
(1).对于Client端,单线程就可以,使用Serial + Serial Old组合
(2).对于吞吐量有要求的,使用Parallel Scavency + Parallel Old组合
(3).对于停顿时间有要求的CMS
(4).G1可以算是目前较为成功的一款收集器