分代
- JDK诞生 Serial追随(单线程)
- 提高效率,诞生了PS(多线程并行)
- 为了配合CMS,诞生了PN,CMS是1.4版本后期引入,CMS是里程碑式的GC(并发),
但是CMS毛病较多,因此目前任何一个JDK版本默认是CMS
年轻代
- Serial 年轻代 串行回收
- PS 年轻代 并行回收
- ParNew 年轻代 配合CMS的并行回收
老年代
- SerialOld
- ParallelOld
- CMS,垃圾回收和应用程序同时运行,降低STW的时间(200ms),但是会有碎片化的问题,碎片到达一定程度,CMS的老年代分配对象分配不下的时候,使用SerialOld 进行老年代回收
不分代
1.G1,1.8已经支持 G1了。G1(10ms) 算法:三色标记 + SATB
2. ZGC (1ms) PK C++ 算法:ColoredPointers + LoadBarrier
3. Shenandoah 算法:ColoredPointers + WriteBarrier
4. Eplison
垃圾收集器跟内存大小的关系
- Serial 几十兆
- PS 上百兆 - 几个G
- CMS - 20G
- G1 - 上百G
- ZGC - 4T - 16T(JDK13)
1.8默认的垃圾回收:PS + ParallelOld