JAVA中几种垃圾回收器及其特点

前言:在java中垃圾回收机制发挥着极其重要的作用,能够实现无用对象内存自动释放、减少内存碎片、加快分配速度,本文将介绍几种常用的垃圾回收器以及其特点

垃圾回收器

Parallel GC (并行GC)

特点:
1.当eden(伊甸园区)内存不足时,发生Minor GC,采用标记复制(因为新生代区的存活对象较少,使用标记复制法的效率高),STW(stop the world),在进行gc时暂时停止用户线程.
2.old 内存不足发生Full GC,标记整理STW
发生Full GC ,新生代和老年代会根据分代回收算法,同时进行垃圾回收,新生代通过标记复制法来进行垃圾回收,老年代通过标记整理来进行回收。它叫做并行GC的原因,是因为在STW,暂停时,会多个线程并行来执行垃圾回收。

3.注重吞吐量高(要做大量的计算)
说明:一般我们会注重吞吐量和响应时间,当需要做大量的计算,响应时间不做过多要求时,我们使用Paraller GC这种垃圾回收器

ConcurrentMarkSweep GC(并发标记清除 GC)

说明:它是一个老年代的垃圾回收器,在垃圾回收器工作的时,用户暂停时间是非常短的,他们可以并发的执行
特点:
1.old并发标记,重新标记时需要STW,并发清除。
但并不是所有阶段都可以并发执行的,标记阶段时可以进行并发标记,清除阶段时可以进行并发清除,但是由于并发操作,会导致漏标的问题,所以要重新标记,重新标记时需要STW,可以看出他用了标记+清除算法,这意味着它会存在内存碎片,因此在最新的JDK已经将它废弃了
2.Failback Full GC
如果清除速度小于对象产生速度,就会造成并发失败,并发失败就会造成Full GC,若触发了Full GC就不能并发了。
3.注重响应时间

G1 GC

在这里插入图片描述
在JDK1.9之后,作为默认的垃圾回收器了.
特点:
1.响应时间与吞吐量兼顾
2.划分为多个区域,每个区域都可以充当eden,survivor,old,humongous.
说明:humongous是专门用来存储大对象的,G1 GC采用的一般都是标记复制算法。
3.新生代回收:eden内存不足,标记复制STW.
说明:一次新生代垃圾回收的过程:
1.当伊甸园区放入的对象太多时,就会触发伊甸园区的垃圾回收,垃圾回收的算法还是采用标记复制算法
在这里插入图片描述
2.当它标记完成后,就会将标记了的这些幸存对象用复制算法复制到幸存区去,标记过程和复制过程都会触发STW,但是幸存对象较少,故暂停时间较短。在这里插入图片描述
3.,当幸存对象复制完毕后,伊甸园区的内存就可以释放掉了。
以上为一次新生代的回收。
随着时间的流逝,伊甸园区又存了很多的对象,伊甸园区的内存再一次不够用了,就会将伊甸园区的幸存对象和上一次Survivor区的新的幸存对象复制到一个新的幸存区,而这个幸存区中有一些对象已经超过了晋升阈值,就会进入到老年代中。
在这里插入图片描述
这样,伊甸园和上一次的幸存区就可以释放掉了.在这里插入图片描述
4.并发标记:old并发标记,重新标记时需要STW.
当老年代的内存越来越多,超过一个阈值,就会触发并发标记,这个阈值一般默认为:老年代的内存占比达到整个堆内存的45%以上,并发标记其实就是在老年代中找到存活对象,并给他们加上存活标记,这个过程是并发执行的,在此期间并不会暂停用户线程,为了解决漏标问题使用原始快照。但是当重新标记时需要STW。
5.混合收集:并发标记完成,开始混合收集,参与复制的有eden,survivor、old,其中老年区会根据暂停时间目标,选择部分回收价值高的区域,复制时STW
在这里插入图片描述
说明:它会先将伊甸园区和幸存区中的存活对象放入到一个新的幸存区中,幸存区中超过晋升阈值的存活对象会和老年代中回收价值较高(老年代中存活对象较少的区域)的存活对象一同复制到一个新的老年代中。
这样他们占用的内存就会得到释放
在这里插入图片描述
这样就完成了一次混合收集,但是注意,混合收集可能会进行多次
6.Failback Full GC
当清除速度小于对象产生速度,就会造成并发失败,并发失败就会造成Full GC,若触发了Full GC就不能并发了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有梦想的小何

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值