学习完了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是目前大多数项目可以使用的最优解,特殊场景除外.