因为 Java11 中
ZGC
的呈现,尽量不要对 GC 调优的钻研下太多功夫,对将来来说,这是升值的。
新生代的垃圾回收器
收集器 | 算法 | 收集器类型 | 阐明 | 实用场景 |
---|---|---|---|---|
Serial | 复制算法 | 单线程 | 进行垃圾回收时,须暂停所有工作线程,晓得回收实现 | 简略高效,适宜内存不大的状况 |
ParNew | 复制算法 | 多线程并行 | 它是 Serial 收集器的多线程版本 | 搭配 CMS 的首选 |
Parallel Scavenge(吞吐量优先收集器) | 复制算法 | 多线程并行 | 相似 ParNew,更加关注吞吐量 | 次要适宜后盾运算不须要太多交互的工作 |
老年代的垃圾回收器
收集器 | 算法 | 收集器类型 | 阐明 | 实用场景 |
---|---|---|---|---|
Serial Old | 标记整顿 | 单线程 | JDK7/ 8 默认的 | Client 模式下虚拟机实用 |
Parallel Old | 标记整顿 | 多线程并行 | Parallel Scavenge 的老年代版本 | 在重视吞吐量场景下应用 |
CMS | 标记革除 | 并行、并发 | 尽可能缩短 GC 时用户线程进行的工夫,毛病:1、容易有内存碎片 2、须要更多的 cpu 资源 3、产生浮动垃圾,须要更大的堆空间 | 器重服务的相应速度 |
G1 | 跨代、标记整顿 | 并行、并发 | JDK7 正式引入,采纳分区回收的思维,根本不就义吞吐量的前提下,低进展内存回收,可预测的进展是其最大的劣势 | 面向服务端利用的垃圾回收器,指标是取代 CMS |
垃圾回收器搭配