美文网首页
JVM垃圾收集器的分类和组合使用

JVM垃圾收集器的分类和组合使用

作者: 小动乾坤 | 来源:发表于2024-02-27 01:43 被阅读0次

垃圾收集器分类

按照垃圾收集阶段的垃圾收集线程数来分类

串行垃圾回收器:垃圾回收阶段只可以一个垃圾回收线程执行操作

并行垃圾回收器:垃圾回收阶段可以多垃圾回收线程并行操作

按照垃圾线程和用户线程有没有并行执行能力来分类(并行执行能力代表垃圾收集线程与用户线程并行执行的过程中不影响垃圾收集过程的安全性)

并发垃圾回收器:并发垃圾回收器在操作执行完之前,用户线程可以并行的执行,不叫并行垃圾回收器是为了区别于另一种分类下的并行垃圾回收器(垃圾收集线程是否可以并行为分类标准)

独占式垃圾回收器:独占式垃圾回收器在执行完操作之前,用户线程不可以同时开始执行过程

按照垃圾收集过程会不会整理内存空间分类

压缩式垃圾回收器:会整理内存空间

非压缩式垃圾回收器:不会整理内存空间

按照作用目标分类

年轻代垃圾回收器

老年代垃圾回收器

垃圾收集器分类案列

串行垃圾收集器(垃圾收集线程之间不可以并行执行):serial,serial old

并行垃圾收集器(垃圾收集线程之间可以并行执行):ParNew,Parallel Scavenge,Parallel Old

并发垃圾收集器(用户线程和垃圾收集线程可以并发并行执行,垃圾收集线程本身也可以并行执行):CMS,G1

垃圾收集器组合关系及其介绍(按照分别作用于新生代和老年代组合)

Serial,Serial Old

Serial

作用于新生代,工作期间只能单线程执行,使用复制算法,整个垃圾回收过程STW,串行垃圾回收器

Serial Old

作用于老年代,工作期间只能单线程执行,使用标记压缩算法,标记阶段和清理阶段整个垃圾回收过程STW,串行垃圾回收器

组合开启参数

-XX:+UseSerialGC

适合场景

硬件系统只有一个单核处理器,最大程度释放执行引擎吞吐能力

ParNew,CMS,Serial Old

ParNew

作用于新生代,工作期间可以多线程并行执行,使用复制算法,整个垃圾回收过程STW,并行垃圾回收器

指定使用当前垃圾收集器

-XX:+UseParNewGC

配套指定并行垃圾收集线程数

-XX:ParallelGCThreads

CMS

作用于老年代,使用标记清除算法

配置参数

指定使用当前垃圾收集器

-XX:+UseConcMarkSweepGC

配套指定老年代触发垃圾回收的阈值

-XX:CMSLnitiatingOccupanyFraction

CMS工作过程

CMS工作过程

初始标记

STW,单线程执行,只标记与根直接关联的对象,过程很快

并发标记

可以与用户线程并行执行,标记线程只有一个线程,从初级标记阶段标记的对象出发遍历整个对象图,耗时长

浮动垃圾在这里产生,只能下一轮再处理

重新标记

STW,多线程并行执行,修正并发标记阶段导致的错标记

并发清除

可以与用户线程并行执行,清除线程只有一个线程,清理前面三个阶段最终标记为死亡的对象

浮动垃圾在这里产生,只能下一轮再处理

要点说明

并发标记和并发清除阶段,由于用户线程并行执行消耗内存,此期间再次触发内存不足时,会直接切换到SerialOld收集器开始执行垃圾收集过程,整个过程STW

Serial Old

作用于老年代,工作期间只能单线程执行,使用标记压缩算法,标记阶段和清理阶段整个垃圾回收过程STW,串行垃圾回收器

组合开启参数

-XX:+UseConcMarkSweepGC

适用场景

官方不建议使用,核心是低延时场景

Parallel,Parallel Old

Parallel

作用于新生代,工作期间可以多线程并行执行,使用复制算法,整个垃圾回收过程STW,并行垃圾回收器

目标吞吐能力

-XX:GCTimeRatio

取值范围(0,100)

最大GC暂停毫秒

-XX:MaxGCPauseMillis

开启自适应调价策略

-XX:+UseAdaptiveSizePolicy

配套指定并行垃圾收集线程数

-XX:ParallelGCThreads

Parallel Old

作用于老年代,工作期间可以多线程并行执行,使用标记压缩算法,整个垃圾回收过程STW,并行垃圾回收器

组合开启参数

-XX:UseParallelGC

G1

实现原理理解

以分区为单位进行内存管理,每个分区逻辑上又有一个分代角色,相同分代角色的分区不要求物理内存上连续,回收分区的时候是将一个分区内的数据复制到另一个分区里,有数据的分区在物理内存上集中存储,需要进行分区回收时优先回收最具性价比的分区(老年代角色分区回收策略,新生代角色回收策略是全部回收),垃圾收集器维护了一个分区回收性价比列表,将每个有数据的分区按照回收性价比进行排序,回收性价比的计算规则为:分区回收能处理的垃圾对象总大小/回收经验统计的分区回收平均耗时

概念介绍

可预测的停顿时间模型

根据分区回收性价比列表,分区回收历史平均耗时统计,实现指定分区回收所使用的时间上限

记忆集

每个分区都维护有一个记忆集列表,其它分区存储的对象A如果引用了当前分区里的对象,那当前分区里的记忆集就会存储对象A的引用信息,记忆集就是类似A对象的引用的集合

维护记忆集,引用数据类型赋值操作时,会检测目标对象实体和当前对象实体是不是在一个分区,不在一个分区的话,会维护目标分区的记忆集信息,每个分区进行垃圾标记的时候,记忆集里面的对象引用信息也会被当作根来处理

适用场景

适用配备多核处理器与大容量内存的物理设备部署服务

优先保证响应速度/低延时的同时,释放执行引擎的吞吐能力/吞吐量

硬性平衡点指标是当堆内存大小在6-8G的时候,CMS和G1的性能表现相当,当堆内存大小大于这个配置的时候,G1的性能表现优于CMS

使用G1垃圾收集器的标准操作流程

开启G1垃圾收集器

-XX:+UseG1GC

设置堆的最大内存

设置最大的停顿时间

G1垃圾回收场景和关键特点介绍

单独回收年轻代角色的分区

垃圾收集线程并行处理,垃圾收集线程独占处理不允许用户线程执行,操作所有年轻代角色分区,涉及的年轻代角色分区不受响应时间限制

混合回收年轻代和老年代角色的分区(堆内存使用达到一个阈值是开始混合回收流程)

第一阶段

老年代角色的分区并发标记过程(用户线程可以并行执行)

第二阶段

混合回收过程,涉及所有年轻代角色的分区,涉及到的老年代角色的分区数量受限于响应速度要求,不需要保证所有老年代角色分区被回收

相关文章

  • JVM垃圾回收

    JVM垃圾收集器 一、垃圾收集器的分类 1.1 Serial GC 出现的最早,比较古老,最大的特点就是垃圾收集策...

  • GC - 收集器

    概述 垃圾收集器是垃圾回收算法的具体实现,不同商家、不同版本的 JVM 所提供的垃圾收集器可能会有差别 收集器组合...

  • 关于GC之四-垃圾收集器实战

    JVM 垃圾回收器分类 新生代串行收集器 串行收集器主要有两个特点:第一,它仅仅使用单线程进行垃圾回收;第二,它独...

  • JVM垃圾收集器分类&垃圾收集器组合关系

    垃圾收集器的各种分类 按线程数分类: 分为单核(串行收集器)和多核(并行收集器)单核 CPU中适合使用串行收集器多...

  • 05 | JVM-GC收集器

    常见的垃圾收集器 上一篇文章中介绍了JVM的GC常见算法,而JVM的垃圾收集器就是这些算法使用编程语言的具体实现,...

  • 垃圾收集器总结

    垃圾收集器总结 各种收集器组合使用的参数 Serial + CMS 注意不能使用-XX:+UseConcMarkS...

  • JVM垃圾收集器总结

    通过上篇JVM垃圾回收算法和垃圾收集器我们对JVM的七大垃圾收集器的运行原理有了大致的了解,我们来总结一下他们之间...

  • G1收集器详解

    详解 JVM Garbage First(G1) 垃圾收集器 G1垃圾收集器入门

  • 5种JVM垃圾收集器特点和8种JVM内存溢出原因

    先来看看5种JVM垃圾收集器特点 一、常见垃圾收集器 现在常见的垃圾收集器有如下几种: 新生代收集器: Seria...

  • Jvm之CMS垃圾收集器

      这篇文章主要介绍JVM的CMS垃圾收集器,以及JVM提供的垃圾收集算法。 一、垃圾收集算法   JVM提供的三...

网友评论

      本文标题:JVM垃圾收集器的分类和组合使用

      本文链接:https://www.haomeiwen.com/subject/inpaadtx.html