❝扫描下方二维码或者微信搜索公众号
❞菜鸟飞呀飞
,即可关注微信公众号,阅读更多Spring源码分析
、Java并发编程
、Netty源码系列
、MySQL工作原理
和JVM专题系列
文章。
1. 前言
虽然目前大部分系统使用的是 JDK8,使用的垃圾回收器也大概率为 G1 或者更古老的垃圾回收器,但是截止到目前为止,JDK 已经更新到 JDK14 了,垃圾回收器也几乎在每一次迭代中被更新,目前最前沿的垃圾回收器为 Shenandoah 和 ZGC,这两款垃圾回收器都是以低延时为主要目的。
由于内容较多,本文先只介绍 Shenandoah,下一篇再介绍 ZGC。
2. Shenandoah 概述
Shenandoah 的目标是将垃圾回收的停顿时间控制在 10ms 以内,这意味着 Shenandoah 不仅需要在并发标记阶段实现并发,还需要在标记清除阶段实现并发。
2.1 题外话
Shenandoah 垃圾回收器是 RedHat 公司发明的,非 Oracle 公司官方实现,不是 Oracle 的亲儿子,因此在一定程度上遭到了“排挤”,只在开源的 OpenJDK12 中开始出现,而在商业版的 Oracle JDK12 中则没有。
2.2 与 G1 的异同点
Shenandoah 与 G1 有很多相同点,都采用了基于 Region 的内存布局,在标记阶段均采用了并发标记。事实上,Shenandoah 在代码实现上使用了很多 G1 的代码,因此 Shenandoah 有很多特点和 G1 是一样的。
另外,Shenandoah