盘点Java中的那些常用的Garbage Collector

本文详细介绍了Java中的垃圾收集器,包括Parallel Scavenge、CMS、G1、ZGC和Shenandoah GC。讨论了各种GC的特性,如吞吐量、停顿时间和内存管理策略。CMS因关注停顿时间而引入,但未成为默认GC,而G1在JDK 9到16是默认选择。ZGC和Shenandoah GC致力于实现极低的停顿时间,但普及率相对较低。文章强调了了解和掌握这些GC的重要性,特别是对于使用Java 8的开发者。
摘要由CSDN通过智能技术生成

GC总览

Java是一门面向对象的语言。在使用Java的过程中,会创建大量的对象在内存中。而这些对象,需要在用完之后“回收”掉,释放内存资源。这件事我们称它为垃圾收集(Garbage Collection,简称GC),而实际执行者就是各种各样的“垃圾收集器”(Garbage Collector,以下也简称GC)。

为什么会有各种各样的GC?因为时代在发展,以前的GC可能不能满足现在的需求,所以就会有源源不断的GC推出来。先来看一下都有哪些主流的GC:

新生代:

Serial:单线程,新生代;

ParNew: 多线程,新生代;

Parallel Scavenge:多线程,新生代,关注吞吐量;

老年代:

Serial Old: 单线程,Serial的老年代版本;

Parallel Old:多线程,Parallel Scavenge的老年代版本,关注吞吐量;

CMS:多线程,标记-清除算法,关注停顿时间,可以与Serial和ParNew配合。

其它

G1:同时负责新生代和老年代,是目前一段时间主流的垃圾收集器(JDK 9到现在JDK 16的默认垃圾收集器)。

ZGC:在大堆下也可以控制STW时间极短(几毫秒内),在JDK 11 为实验阶段,在JDK 15转正。Oracle发起,2017年贡献给OpenJDK。

Shenandoah GC:停顿时间极短,在JDK 12为试验阶段,在JDK 15转正。Red Hat发起,与ZGC和G1是竞争关系。

STW: Stop The World,指的是停止用户线程。GC应该尽量避免STW或者缩减STW的时间。

各JDK版本默认GC

下面来看一下从JDK 7开始在默认GC(JDK 7之前的,我就不考古了,现在大家项目上用的也少)。

  • 在JDK 7,默认是Parallel Scavenge + Serial Old。
  • 在JDK 8 及JDK 7u4之后的版本,默认是Parallel Scavenge + Parallel Old。
  • 在JDK 9 到JDK 16,默认是G1

严格来说之前的版本应该是JDK 1.7, JDK 1.8,这里及下文为了表述方便,我就写成了JDK 7, JDK 8。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值