这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战
在之前的章节,我们讲了JAVA的内存模型、JVM垃圾收集器工作原理和JVM垃圾收集算法,今天我们接着讲JVM虚拟机中垃圾收集器。
前言
在HotSpot虚拟机中的7种垃圾收集器:Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1,先介绍一些垃圾收集的相关概念,再介绍它们的主要特点、应用场景、以及一些设置参数和基本运行原理。
1. Serial收集器
Serial收集器 是新生代单线程收集器,标记和清理都是单线程,优点是简单高效,它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束(STW)。 新⽣代采⽤复制算法,⽼年代采⽤标记-整理算法。
2. Serial Old收集器
Serial Old收集器(标记-整理算法) 是Serial收集器的老年代版本,它同样是一个单线程收集器,使用标记-整理算法。
3. ParNew收集器
ParNew收集器 是新生代收集器,可以认为是Serial收集器的多线程版本,在多核CPU环境下有着比Serial更好的表现。
它的新⽣代采⽤复制算法,⽼年代采⽤标记-整理算法
4. Parallel Scavenge收集器
Parallel Scavenge收集器(停止-复制算法) Parallel Scavenge 收集器也是使⽤复制算法的多线程收集器,它看上去⼏乎和 ParNew 都⼀样。但这款收集器追求高吞吐量,高效利用CPU。吞吐量一般为99%, 吞吐量= 用户线程时间/(用户线程时间+GC线程时间)。适合后台应用等对交互相应要求不高的场景。
这是 JDK1.8 默认收集器,JDK1.8 默认使⽤的是 Parallel Scavenge + Parallel Old
5. Parallel Old收集器
Parallel Old收集器(停止-复制算法) 是Parallel Scavenge收集器的老年代版本,并行收集器,吞吐量优先。
6. CMS(Concurrent Mark Sweep)收集器
CMS(Concurrent Mark Sweep)收集器(标记-清理算法) 收集器是⼀种以获取最短回收停顿时间为⽬标的收集器。拥有高并发、低停顿的优点,追求最短GC回收停顿时间,cpu占用比较高,响应时间快,停顿时间短,多核cpu追求高响应时间的选择,,由于停顿时间短,因此⽤户体验很好。
7. G1 收集器
G1 (Garbage-First) 收集器主要针对配备多颗处理器及⼤容量内存的机器. 以极⾼概率满⾜ GC 停顿时间要求的同时,还具备⾼吞吐量性能特征.
jdk9~14默认使用G1收集器
8. ZGC 收集器
与CMS中的ParNew和G1类似,ZGC也采用标记-复制算法,不过ZGC对该算法做了重大改进:ZGC在标记、转移和重定位阶段几乎都是并发的,这是ZGC实现停顿时间小于10ms目标的最关键原因。
jdk15默认使用ZGC收集器