垃圾回收之GC对比

一.各个 GC 对比

二.常用的 GC 组合

 (1)Serial+Serial Old 实现单线程的低延迟 垃圾回收机制;

(2)ParNew+CMS,实现多线程的低延迟垃 圾回收机制;

(3)Parallel Scavenge和Parallel Scavenge Old,实现多线程的高吞吐量垃圾 回收机制。

三.GC 如何选择

选择正确的 GC 算法,唯一可行的方式就是去尝试,一般性的指导原则:

1. 如果系统考虑吞吐优先,CPU 资源都用来最大程度处理业务,用 Parallel GC;

2. 如果系统考虑低延迟有限,每次 GC 时间尽量短,用 CMS GC;

3. 如果系统内存堆较大,同时希望整体来看平均 GC 时间可控,使用 G1 GC。

对于内存大小的考量: 1. 一般 4G 以上,算是比较大,用 G1 的性价比较高。

2. 一般超过 8G,比如 16G-64G 内存,非常推荐使用 G1 GC

四.GC 总结

到目前为止,我们一共了解了 Java 目前支持的所有 GC 算法,一共有 7 类:

1. 串行 GC(Serial GC): 单线程执行,应用需要暂停;

2. 并行 GC(ParNew、Parallel Scavenge、Parallel Old): 多线程并行地执行垃圾回收, 关注与高吞吐;

3. CMS(Concurrent Mark-Sweep): 多线程并发标记和清除,关注与降低延迟;

4. G1(G First): 通过划分多个内存区域做增量整理和回收,进一步降低延迟;

5. ZGC(Z Garbage Collector): 通过着色指针和读屏障,实现几乎全部的并发执行,几毫 秒级别的延迟,线性可扩展;

6. Epsilon: 实验性的 GC,供性能分析使用;

7. Shenandoah: G1 的改进版本,跟 ZGC 类似。

五.GC 算法和实现的演进路线:

1. 串行 -> 并行: 重复利用多核 CPU 的优势,大幅降低 GC 暂停时间,提升吞吐量。

2. 并行 -> 并发: 不只开多个 GC 线程并行回收,还将 GC 操作拆分为多个步骤,让很多繁重的任务和应用线程一起并发 执行,减少了单次 GC 暂停持续的时间,这能有效降低业务系统的延迟。 3. CMS -> G1: G1 可以说是在 CMS 基础上进行迭代和优化开发出来的,划分为多个小堆块进行增量回收,这样就更进 一步地降低了单次 GC 暂停的时间

4. G1 -> ZGC::ZGC 号称无停顿垃圾收集器,这又是一次极大的改进。ZGC 和 G1 有一些相似的地方,但是底层的算法 和思想又有了全新的突破。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值