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模式新生代收集器 |
ParNew |
1、新生代收集器,可以和Serial Old、CMS组合使用 2、采用复制算法 3、使用多线程进行垃圾回收,回收时会导致Stop The World,其它策略和Serial一样 4、许多虚拟机Server模式的新生代收集器 |
Parallel Scavenge |
1、新生代收集器,可以和Serial Old、Parallel组合使用,不能和CMS组合使用 2、采用复制算法 3、使用多线程进行垃圾回收,回收时会导致Stop The World 4、关注吞吐量 |
Serial Old |
1、年老代收集器,可以和所有的年轻代收集器组合使用,Serial收集器的年老代版本 2、标记-整理算法,会对垃圾回收导致的内存碎片进行整理 3、使用单线程进行垃圾回收,回收时会导致Stop The World,用户进程停止 |
Parallel Old |
1、年老代收集器,只能和Parallel Scavenge组合使用,Parallel Scavenge收集器的年老代版本,Stop The World 2、多线程,采用标记-整理算法,会对垃圾回收导致的内存碎片进行整理 3、关注吞吐量的系统可以将Parallel Scavenge+Parallel Old组合使用 |
CMS |
1、年老代收集器,可以和Serial、ParNew组合使用 2、采用标记-清除算法,可以通过设置参数在垃圾回收时进行内存碎片的整理 3、CMS是并发算法,表示垃圾回收和用户进行同时进行,但是不是所有阶段都同时进行,在初始标记、重新标记阶段还是需要Stop the World。 4、CMS垃圾回收分这四个阶段,三次标记一次回收: ④ 并发清除,清除的同时用户进程会导致新的垃圾,时间长 5、适合于对响应时间要求高的系统,以最短回收停顿时间为目标 缺点: ① 对CPU资源非常敏感,并发且维护用户进程的代价 ② 无法处理浮动垃圾,清除时产生新垃圾 ③ 由于使用标记清除,故有空间碎片 |
G | 1、并行并发,使用多个CPU缩短STW的时间 2、分代收集,不需要其他收集器配合也能独立管理堆 3、空间整合,整体基于标记整理算法,局部两个Region基于复制 4、可预测停顿,可以指定时间段M内GC过程时间不超过N 5、较低停顿,停顿时间更加可控可预测 特殊点: ① 新生代和老年代不再物理隔离,都属于一部分Region的集合,将堆分为大小相等的Region。 ② G1跟踪各个Region垃圾的价值大小以及回收需要时间维护一个Region优先列表,每次先回收价值最大的Region,这是G1-Garbage First名字的由来 ③ G1运作分四个阶段,三次标记一次回收 初始标记,并发标记,最终标记,筛选回收 |
分类
根据线程分类 | |||
多线程 | 单线程 | ||
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 |