- JDK 8:Parallel Scavenge(新生代)+ Parallel Old(老年代)
- JDK8以后:G1收集器
什么是串行回收和并行回收?
Serial收集器:串行收集器
新生代使用标记复制算法,老年代使用标记整理算法。工作时必须停止其它工作线程(stop the world)
ParNew收集器:Serial收集器的多线程版本
Parallel Scavenge 收集器
-XX:+UseParallelGC
使用 Parallel 收集器+ 老年代串行
-XX:+UseParallelOldGC
使用 Parallel 收集器+ 老年代并行
Parallel Scavenge关注用户线程运行时间占cpu总运行时间的百分比(吞吐量)。Parallel Scavenge 收集器提供了很多参数供用户找到最合适的停顿时间或最大吞吐量
Serialold收集器
Serial 收集器的老年代版本
ParallelOld收集器
Parallel Scavenge 收集器的老年代版本
CMS收集器
关注用户体验,以最短停顿时间为目标。真正意义上的第一个并发收集器。让用户工作线程和垃圾回收线程可以同时运行。
G1收集器
专门针对于拥有多核处理器和大内存的机器。面向服务器的垃圾收集器,在满足停顿时间的同时还具备高吞吐量的特征。
为解决CMS收集器碎片多的问题,G1收集器会进行空间压缩。用regions(图中的小格子)代替细粒度的空闲列表进行分配,减少内存碎片的产生。
G1收集器追踪查看那个区域的可回收对象多,优先回收。
还可以使用暂停预测模型来满足用户定义的暂停时间目标,并根据指定的暂停时间目标选择要收集的区域数量。
从整体来看基于标记-整理算法,从局部来看基于标记-复制算法。
ZGC收集器
ZGC 也采用标记-复制算法 。ZGC 可以将暂停时间控制在几毫秒以内,且暂停时间不受堆内存大小的影响。代价是牺牲了吞吐量。