有了虛擬機,就一定需要收集垃圾的機制,這就是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 |