Java进阶指南:GC 算法2.2串行 GC/并行 GC

本文介绍了JVM中的串行GC和并行GC。串行GC适用于小内存和单核环境,使用单线程进行垃圾收集,会导致STW。并行GC则能利用多核CPU,提高GC效率,减少暂停时间,通过调整ParallelGCThreads参数可以控制GC线程数。
摘要由CSDN通过智能技术生成

系列文章目录

1:JVM核心知识

        1.1:字节码

        1.2:类加载器

        1.3:内存模型

        1.4:JVM启动参数

        1.5:相关性能分析工具

2.GC算法

        2.1:GC的背景与一般原理
        2.2:串行 GC/并行 GC


目录

前言

二、串行GC的特点与适用的场景

1.串行GC的特点

2.适用的场景

三、并行GC

总结


​​​​​​​


前言

本系列主要针对想进一步进阶Java的开发者,本文介绍串行GC与并行GC


一、什么是串行GC,怎么配置呢?

串行 GC 对年轻代使用 mark-copy(标记-复制) 算法,对老年代使用 mark-sweep-compact(标记-清除-整理)算法。

注意此处的标记-复制是指在年轻代中,我们根据GCroots做一次标记后,直接复制到另外一个存活区就好了,不需要整理,因为年轻代的一次GC不是原地进行的。

而老年代的GC是在原地进行的,标记-清除-整理代表我们在对老年代进行标记清除后,会产生内存碎片,我们需要整理这些内存碎片。

-XX:+UseSerialGC 配置串行 GC

二、串行GC的特点与适用的场景

1.串行GC的特点

前面已经说过串行GC的年轻代和老年代每次GC时的处理略微有点不同。

两者都是单线程的垃圾收集器,不能进行并行处理,所以都会触发全线暂停(STW),停止所有的应用线程。

2.适用的场景

这种 GC 算法不能充分利用多核 CPU。不管有多少 CPU 内核,JVM 在垃圾收集时都只能使用单个核心。 CPU 利用率高,暂停时间长。简单粗暴,就像老式的电脑,动不动就卡死。 该选项只适合几百 MB 堆内存的 JVM,而且是单核 CPU 时比较有用。

如果堆内存比较大的话,能存储的对象就会变多,这时候做GC会暂停很长的时间,非常不适合线上业务的进行

串行GC是最早的一批GC,有其独特的历史意义,有了这第一个GC算法,后面的GC算法才得以产生。

三、并行GC

前面我们了解了串行GC无法利用我们的多核CPU,这在现代是无法接受的,那么有没有能利用多核的CPU呢?答案就是我们的并行GC。

并行GC的启动参数有两个:

-XX:+UseParallelGC

-XX:+UseParallelOldGC

并行GC和串行GC的算法原理基本类似,最大的区别是并行GC能用上多核来提升GC效率,能达到系统最大的吞吐量。

主要体现在这两点:

• 在 GC 期间,所有 CPU 内核都在并行清理垃圾,所以总暂停时间更短;

• 在两次 GC 周期的间隔期,没有 GC 线程在运行,不会消耗任何系统资源

我们能通过-XX:ParallelGCThreads=N 来指定 GC 线程数, 其默认值为 CPU 核心数。

可以看出并行GC在STW期间会把所有业务线程挂起,去做GC,这会带来吞吐量的提升,但是业务上会有一点延迟。


总结

以上就是今天要讲的内容,本文介绍了串行GC与并行GC,有没有一种能够不那么极端,在GC过程中,还会有线程去做业务相关的逻辑的呢,答案是有。接下来我们将介绍CMS GC/G1 GC,敬请期待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值