学习完了7种垃圾回收器之后,总结一下
为啥是7种?
Serial
Serial Old
ParaNew
Parallel Scavenge
Parallel Old
CMS
G1
共7种,其中主要学习的是Parallel + CMS +G1
垃圾回收器 | 并行/串行/并发分类 | 针对回收位置 | 回收算法 | 主要思想 | 适用场景 |
---|---|---|---|---|---|
Serial | 串行 | 新生代 | 复制算法 | 低停顿时间 | 硬件资源匮乏,单核cpu情况下 |
Serial Old | 串行 | 老年代 | 标记-压缩算法 | 低停顿时间 | 硬件资源匮乏,单核cpu情况下 |
ParNew | 并行 | 新生代 | 复制算法 | 低停顿时间 | 多核cpu场景下替代Serial |
Parallel Scavenge | 并行 | 新生代 | 复制算法 | 高吞吐量 | jdk8默认垃圾回收器,多用于服务端 |
Parallel Old | 并行 | 老年代 | 标记-压缩算法 | 高吞吐量 | jdk8默认垃圾回收器,多用于服务端 |
CMS | 并行/并发 | 老年代 | 标记-清除算法 | 低停顿时间 | 适用于低停顿时间的场景,如移动端 |
G1 | 并行/并发 | 新生代/老年代 | 复制算法/标记-压缩算法 | 高吞吐量的前提下,尽量保证低停顿时间 | 适用于服务端 |
jdk9之后默认垃圾回收器 |
1.1 垃圾回收器的选择
7种垃圾回收器以及他们的组合关系如何选择:
没有完美的垃圾回收器,只能针对不同的场景不同的业务来选择垃圾回收器
- 当堆内存较小(100M以下)选择串行垃圾回收器
- 服务器硬件为单核,并且不要求低停顿时间的时候,选择串行垃圾回收器
- 多核cpu,要求高吞吐量选择并行垃圾回收器或者jvm默认垃圾回收器
- 多核cpu,要求低延迟时选择并发垃圾回收器
- G1是目前大多数项目可以使用的最优解,特殊场景除外.