Java垃圾回收器GC

Serial-年轻代

- 单线程GC,在进行垃圾收集时,必须暂停其他所有的工作线程,直至收集结束,Stop The World,即必须暂停其他所有的工作线程,直到它收集结束,
- 新生代使用:标记-复制算法,老年代使用:标记-整理算法
- 优点:简单,单线程效率高,对于运行在client模式下的虚拟机而言较好
- 缺点:Stop The World过长

ParNew-年轻代

- 其实就是Serial的多线程版本,除了使用多条线程进行垃圾收集之外,其余都和Serial完全一样。
- 新生代使用:标记-复制算法,老年代使用:标记-整理算法
- 是许多运行在server模式下虚拟机的首要选择,除了serial收集器外,只有它ParNew能与CMS收集器(真正意义上的并发收集器)配合工作

Paraller Scavenge-年轻代

- 使用复制算法
- 并发多线程收集器,目标是达到一个可控的的吞吐量,
- 和ParNew的最大区别是GC自动调节策略,JVM会根据系统的运行状态收集性能监控信息,动态设置这些参数,以提供最优的停顿时间和最高的吞吐量
- server模式下默认GC的方式。
- 停顿时间短,良好的响应速度可以提升用户体验。有自适应调节策略。

Serial Old-老年代

- 是Serial的老年代版本,同样是一个单线程收集器,每次进行回收都很耗时
- 使用标记整理算法

# Parallel Old-老年代

垃圾回收的时候仅执行整个堆压缩,这会导致相当长的暂停时间。

- Parallel Scavenge收集器的老年代版本,多线程
- 使用标记整理算法

CMS-老年代

Cuncurrent Mark Sweep Collector,CMS 使用标记清除算法,不进行压缩。

- 一种以获得最短停顿时间为目标的GC,目前用重视响应速度的服务端上(如BS架构)。
- 使用XX:+UseConcMarkSweepGC指定使用。
- 运作过程:初始标记、并发标记、重新标记、并发清除,收集结束会产生大量空间碎片
  优点:①响应时间短

缺点:①对CPU资源很敏感,会导致应用变慢,总吞吐量会降低

G1-分代收集

基础知识

G1 使用标记整理(压缩)算法进行垃圾收集。G1 可以在多处理器上井行执行,充分利用 CPU,以减少暂停时间并提高吞吐量。因此,每次垃圾回收时,G1 都会在用户定义的暂停时间内持续工作以减少碎片,消除了潜在的碎片问题。

G1 可以进行分代收集,既可以收集新生代也可以收集老年代。

G1 不是实时收集器,它是以高概率但不是绝对确定地满足设定的暂停时间目标。G1 会根据之前收集的数据,估计在用户指定的目标时间内可以收集多少个区域。因此,G1 有一个相当准确的区域收集成本模型,并旦它使用该模型来确定要收集哪些区域以及要收集多少区域,同时保持在暂停时间目标内。

推荐使用场景

G1 的第一个重点是为运行需要大堆且 GC延迟有限的应用程序的用户提供解决方案。所以说需要 6GB 或更大的堆大小,以及低于 0.5秒的稳定且可预测的暂停时间。

如果应用程序具有以下的一个或多个特征,那么使用 G1 是一个很好的选择:

- 超过 50% 的Java堆被实时数据占用。
- 对象分配率或提升率差异很大。
- 不需要的长时间垃圾收集或压缩暂停(超过 0.5 到 1秒)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值