JVM各个垃圾收集器区别

默认收集器

jdk1.7 Parallel Scavenge(新生代)+Parallel Old(老年代)
jdk1.8 Parallel Scavenge(新生代)+Parallel Old(老年代)
jdk1.9 G1

虚拟机启动检测主机是否为服务器,如果是,则以Server模式启动,否则以client模式启动,检测的根据是至少2个CPU和最低2GB内存。

所有垃圾回收器的特点

Serial

1、新生代收集器,可以和Serial Old、CMS组合使用

2、采用复制算法

3、使用单线程进行垃圾回收,回收时会导致Stop The World,用户进程停止

4、Client模式新生代收集器

JVM各个垃圾收集器区别
ParNew

1、新生代收集器,可以和Serial Old、CMS组合使用

2、采用复制算法

3、使用多线程进行垃圾回收,回收时会导致Stop The World,其它策略和Serial一样

4、许多虚拟机Server模式的新生代收集器

JVM各个垃圾收集器区别
Parallel Scavenge

1、新生代收集器,可以和Serial Old、Parallel组合使用,不能和CMS组合使用

2、采用复制算法

3、使用多线程进行垃圾回收,回收时会导致Stop The World

4、关注吞吐量

JVM各个垃圾收集器区别
Serial Old

1、年老代收集器,可以和所有的年轻代收集器组合使用,Serial收集器的年老代版本

2、标记-整理算法,会对垃圾回收导致的内存碎片进行整理

3、使用单线程进行垃圾回收,回收时会导致Stop The World,用户进程停止

JVM各个垃圾收集器区别
Parallel Old

1、年老代收集器,只能和Parallel Scavenge组合使用,Parallel Scavenge收集器的年老代版本,Stop The World

2、多线程,采用标记-整理算法,会对垃圾回收导致的内存碎片进行整理

3、关注吞吐量的系统可以将Parallel Scavenge+Parallel Old组合使用

JVM各个垃圾收集器区别
CMS

1、年老代收集器,可以和Serial、ParNew组合使用

2、采用标记-清除算法,可以通过设置参数在垃圾回收时进行内存碎片的整理

3、CMS是并发算法,表示垃圾回收和用户进行同时进行,但是不是所有阶段都同时进行,在初始标记、重新标记阶段还是需要Stop the World。

4、CMS垃圾回收分这四个阶段,三次标记一次回收:
① 初始标记,标记一下GC Roots能直接关联到的对象,速度快
② 并发标记,GC Roots Tracing,时间长,不停止用户进程
③ 重新标记,Stop the World,修正并发标记期间因用户程序继续运行导致标记变动的那一部分对象的标记记录,时间长,但远比并发标记时间短

④ 并发清除,清除的同时用户进程会导致新的垃圾,时间长

5、适合于对响应时间要求高的系统,以最短回收停顿时间为目标

缺点:

① 对CPU资源非常敏感,并发且维护用户进程的代价

② 无法处理浮动垃圾,清除时产生新垃圾

③ 由于使用标记清除,故有空间碎片

JVM各个垃圾收集器区别
G 1、并行并发,使用多个CPU缩短STW的时间
2、分代收集,不需要其他收集器配合也能独立管理堆
3、空间整合,整体基于标记整理算法,局部两个Region基于复制
4、可预测停顿,可以指定时间段M内GC过程时间不超过N
5、较低停顿,停顿时间更加可控可预测

特殊点:

① 新生代和老年代不再物理隔离,都属于一部分Region的集合,将堆分为大小相等的Region。

② G1跟踪各个Region垃圾的价值大小以及回收需要时间维护一个Region优先列表,每次先回收价值最大的Region,这是G1-Garbage First名字的由来

③ G1运作分四个阶段,三次标记一次回收

     初始标记,并发标记,最终标记,筛选回收

JVM各个垃圾收集器区别

分类

根据线程分类
多线程 单线程
ParNew、Parallel Scavenge、Parallel Old、CMS、G1 Serial、Serial Old
根据年代分类
新生代 老年代

Serial、ParNew、

Parallel Scavenge

Serial Old、Parallel Old、CMS
G1
根据算法分类
复制 标记清除 标记整理
Serial、ParNew、Parallel Scavenge CMS Serial Old、G1、Parallel Old