JVM系列之经典垃圾回收器(上篇)

扫描下方二维码或者微信搜索公众号菜鸟飞呀飞,即可关注微信公众号,阅读更多Spring源码分析Java并发编程Netty源码系列MySQL工作原理文章。

微信公众号

1.前言

随着 JDK 的不断更新,垃圾回收器的效率也越来越高。每一次 JDK 的更新,必然会包含有垃圾回收器的更新,截止目前,在最新的 JDK14 版本中,最新的垃圾回收器为 ZGC。

从垃圾回收器发展至今,出现过很多垃圾回收器,例如:Serial、ParNew、Parallel Scavenge、SerialOld、CMS、Parallel Old、G1、Shenandoah、ZGC 等,虽然目前比较流行的是 G1 和 ZGC,但是那些经典的垃圾回收器我们也有必要了解一下它们的工作原理,一方面是因为目前仍然有很多系统使用的都是 JDK8 及以下版本,而这些版本中有很多系统都是默认使用的经典的垃圾回收器,搞懂它们的原理,方便我们对它进行调优,另一方面就是为了面试,毕竟垃圾回收器是面试高频考点。

接下来本文将先介绍 Serial、ParNew、Parallel Scavenge、SerialOld、CMS、Parallel Old 这六款经典的垃圾回收器的工作原理,以及使用场景和相关参数配置,在下一篇文章中将会主要介绍 G1、Shenandoah、ZGC 这些 GC 的工作原理。

2.性能指标

在介绍垃圾回收器之前,先介绍一下衡量垃圾回收器的几个常用指标。

首先是「吞吐量」,它描述的是用户线程执行的时间比上全部运行时间(全部运行时间 = 用户线程时间+垃圾回收线程执行时间执行),吞吐量越高,表明系统的资源利用率越高。

然后是「停顿时间」,它表示的是 GC 线程在执行过程中,导致用户线程停顿的时间,如果停顿时间越长,那么用户线程卡顿的时间越长,用户体验越差,因此我们希望的是停顿时间越短越好。

另外还有一个指标就是「内存占用率」,因为垃圾回收器在执行过程中,它也需要占用一定的内存空间,当然我们期望的是内存占用率越小越好,尤其是在服务器内存配置较低的情况下。如果服务器的资源配置很高,内存很大,内存占用率高一点也可以接受。

通常情况下,「吞吐量和低延时(停顿时间)这两个指标是对立的」,无法同时兼顾两者,如果想追求低延时,那么吞吐量就会下降;如果追求高吞吐量,那么停顿时间就会变长。不过随着目前垃圾回收器的不断发展,越来越多的垃圾回收器都是以「在保证高吞吐量的情况下,尽可能的去追求低延时」为原则,来进行垃圾回收器的实现。

3.Serial

Serial 是针对新生代的垃圾回收器,它是单线程执行的,是一款串行的垃圾回收器,采用的是复制算法。它的单线程并不仅仅指它在进行垃圾回收时是单线程或者单处理器执行,更深的含义是它在垃圾回收时,需要暂停其他所有的线程,造成 STW。

当 JVM 处于客户端模式下时,Serial 是默认的垃圾回收器,它的优点是简单高效。在内存资源受限的环境下,Serial 垃圾回收器相比其他垃圾回收器,它所占用的内存更小。对于单处理器的场景,Serial 处理器由于是单线程的,它省去了线程之间的资源竞争,因此会更加高效。

当使用参数 「-XX:+UseSerialGC」时,在开启使用Serial垃圾回收器同时,老年代的垃圾回收

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值