有了虚拟机,就一定需要收集垃圾的机制,这就是Garbage Collection
,对应的产品我们称为 Garbage Collector
。
- 1999年,随JDK 1.3.1 一起来的是串行方式的
Serial GC
,它是第一款GC。ParNew GC
是Serial GC
的多线程版本。 - 2002年2月26日,
Parallel GC
和Concurrent Mark Sweep GC
( 即CMS
) 跟随 JDK1.4.2 一起发布。 Parallel GC
在 JDK6 之后成为 Hotspot 默认GC。- 2012年,在 JDK1.7u4 中,
G1
可用。 - 2017年,JDK9 中
G1
成为默认垃圾收集器,以替代CMS
。 - 2018年3月,JDK10 中
G1
的并行完整垃圾回收,实现并行性能改善最坏情况的延迟。 - 2018年9月,JDK11 发布。引入
Epsilon GC
,又称为“No-Op(无操作)” 回收器;同时引入ZGC
: 可伸缩的低延迟回收器(Experimental)。 - 2019年3月,JDK12 发布。增加
G1
,自动返回未使用堆内存给操作系统; 同时,引入Shenandoah GC
:低停顿时间的GC(Experimental)。 - 2019年9月,JDK13 发布。增强
ZGC
,自动返回未使用堆内存给操作系统。 - 2020年3月,JDK14 发布。删除
CMS
。扩展ZGC
在 mac 和 windows 的应用。
7款 经典 的垃圾回收器(不包含新发行的GC)
串行回收器: Serial
、Serial Old
并行回收器: ParNew
、Parallel Scavenge
、 Parallel Old
并发回收器: CMS
、 G1
区域 | GC |
---|---|
新生代 | Serial GC 、 Parallel Scavenge 、 ParNew GC |
老年代 | Serial Old GC 、 Parallel Old GC 、 CMS |
整堆收集器 | G1 |