目前JVM的垃圾回收器都是基于分代实现的,即年轻代和老年代,年轻代又分Eden区和S1、S2区
# 并行、并发的概念
- 并行(Parallel)多个处理器,每个处理器都处理不同的任务
- 并发(Concurrent)一个处理器处理多个任务,通过快速的切换,照顾到每一个任务
# 垃圾回收器组合关系图
这个关系图随着JDK和虚拟机版本是不停变化的,这里只写出1.8 HotSpot 64bit
# Serial、Serial Old
第一代垃圾回收器组合,特点是串行的
- 新生代满了,STW,Serial开始工作
- 老年代满了,STW,Serial Old开始工作
# Parallel Scavenge、Parallel Old
第二代垃圾回收器组合,由于串行太慢,就改成并行的了,较Serial系列 快了不少
- 新生代满了,STW,Parallel Scavenge开始工作
- 老年代满了,STW,Parallel Oldd开始工作
TIP
多线程移动对象时,也会使用堆中分配内存时的TLAB技术,减少资源竞争
# ParNew、CMS、Serial Old
第三代垃圾回收器组合,特点是可以边工作边清理垃圾
ParNew负责年轻代、CMS和Serial Old负责老年代
# G1
第四代垃圾回收器,采用特有的Region模式,在JDK7中推出,目前使用较广泛
TIP
如果是单核处理器,Serial回收器的性能不一定比Parallel回收器差
# 革命性的垃圾回收器
# ZGC
未来的第五代垃圾回收器,目前还在实验期,实现过程很复杂,在性能上较前几代有颠覆性的提升