JVM GC发展史

本文介绍了JVM的垃圾收集器,包括Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS和G1收集器的工作原理、特点及适用场景。重点讨论了GC的停顿时间、吞吐量和空间碎片等问题,并提到了ZGC作为低延迟的实验性收集器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、JVM垃圾收集器

在这里插入图片描述jvm发展到现在有这么些垃圾收集器,虽然有些已经被新版本的jdk舍弃了,这两年来更新的jdk中,主要是针对G1与ZGC的容器优化中,其他容器要么被移除,要么被弃用。不过现在市场上的项目很多都停留在jdk1.8阶段,包括面试问题大多数都是以jdk1.8为主要问题版本分析。比如jdk默认的是Parallel Scavenge收集器,默认Parallel Scavenge+Parallel Old GC组合。

1.1、Serial收集器

Serial(串行)收集器收集器是最基本、历史最悠久的垃圾收集器了(在jdk1.3.1版本之前Serial是唯一一个年轻代的GC容器)。大家看名字就知道这个收集器是一个单线程收集器了。它的 “单线程” 的意义不仅仅意味着它只会使用一条垃圾收集线程去完成垃圾收集工作,更重要的是它在进行垃圾收集工作的时候必须暂停其他所有的工作线程( “Stop The World” ),直到它收集结束。这就意味着每次GC时都会给用户带来一定的卡顿现象造成不良的用户体验。他相比于其他收集器也有一定的优点:简单而高效(与其他收集器的单线程相比),Serial收集器由于没有线程交互的开销,自然可以获得很高的单线程收集效率。
新生代采用复制算法,老年代采用标记-整理算法。在这里插入图片描述

1.2、ParNew收集器

可以这样说ParNew就是Serial的一个升级版,除了支持多线程GC回收之外,其余行为(控制参数、收集算法、回收策略等等)和Serial收集器完全一样。他是许多运行在Server模式下的虚拟机中首选的新生代收集器,如图中垃圾回收器关系所示除了Serial收集器外,也只有它能与CMS收集器配合工作。

1.3、Parallel Scavenge收集器

此收集器看似与ParNew收集器的功能上类似,但是他们的侧重点不同。Parallel Scavenge收集器关注点是吞吐量(高效率的利用CPU)。CMS等垃圾收集器的关注点更多的是用户线程的停顿时间(提高用户体验)。所谓吞吐量就是CPU中用于运行用户代码的时间与CPU总消耗时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值