JVM调优之JVM垃圾收集器

本文详细介绍了JVM的垃圾收集器,包括分代收集理论和各种垃圾回收算法,如标记-复制、标记-清除、标记-整理和分代算法。重点讨论了Serial、Serial Old、Parallel Scavenge、Parallel Old、ParNew和CMS收集器的特点和适用场景,特别是CMS收集器的并发标记和浮动垃圾问题。最后,文章提到了G1收集器,它是JVM一款革命性的垃圾收集器,通过区域化内存管理和并发回收策略,以减少大内存GC的STW时间。
摘要由CSDN通过智能技术生成

JVM垃圾收集器

前言:我们在jvm调优时,主要目的就是让程序能够稳定的运行,减少卡顿,提升用户体验。而我们程序要都知道,在进行Full GC时,会造成STW(Stop The World)停止所有用户线程,造成卡顿。严重时会造成大量用户线程超时、失败等。调优就是根据不同场景,选择不同的垃圾收集器,并对其参数调整,来达到我们的目的,那么垃圾收集器有哪些,他的机制如何,我们又该如何选择和调优呢?

一、垃圾回收机制和常见垃圾收集器

先来看看目前主流的垃圾收集器:
在这里插入图片描述
在说这些收集器的机制时,我们先了解一下分代理论和垃圾回收算法

分代收集理论

现代大部分的虚拟机的垃圾回收器都遵循“分代收集”的理论基础来进行设计实现:
■ 绝大部分的对象的声明周期很短,都是朝生夕死。
■ 历经多次垃圾回收后仍然存活的对象就可能更加越难被回收。
根据这个理论基础,JVM的大部分虚拟机将堆空间逻辑划分为新生代/年轻代、老年代,垃圾收集器可以根据不同的区域选择不同的回收算法进行GC。
在这里插入图片描述

垃圾回收算法

目前的算法有:标记-复制算法、标记-清除算法、标记-整理算法以及分代算法

1.标记-复制算法

如图所示:将内存分隔为两块相同大小的区域,每次只使用其中的一块,每当GC完成后,将存活的对象复制到另一块区域,然后将前一块清空。
在这里插入图片描述

2.标记-清除算法

如图所示:该算法分为标记和清除两个阶段,标记存活的对象,然后GC清除掉没有被标记的对象
在这里插入图片描述
这种算法虽然简单,但是有两个问题:
● 内存越大,要标记的对象越多,耗时越久,性能越低。
● 内存碎片化问题,导致大对象(数组)分配困难。

3.标记-整理算法

它的大体流程和标记清除法一致,但是它具有整理内存空间的功能。这种算法避免了内存碎片化的问题,但是效率上相对于标记-清除法略低。
在这里插入图片描述

4.分代算法

根据对象存活周期的不同将内存划分为几块,一般是新生代和老年代,新生代基本采用标记-复制算法,老年代采用标记整理算法。

接下来再说说不同的垃圾收集器:

二、Serial、Serial Old

Serial针对年轻代、Serial Old针对老年代,但是他俩有个特点就是

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值