一张图+一句话,记住所有 JVM 垃圾收集器!

JVM调优:选择合适的GC collector (一) <br />正文之前,先介绍一人:Jon Masamitsu。此人背景不详,不过他在SUN做的就是JVM,所以他的blog我认为是每一个想对JVM调优的人都应该读一读的。本文的很多观点和一些图也是取自他的blog。<br /> blog link:http://blogs.sun.com/jonthecollector/ <br /><br /> 在他的一篇blog【1】中,写到了GC调优的最重要的三个选项:<br /> 排在第三位的是young generation在整个JVM heap中所占的比重 阅读详情

最近找工作,之前加班火气大,加上吃错药,休息了几个月!总结别随意吃寒凉药,本来就虚,工作随之 GG。休息了段时间,老问这个 JVM。所以今天我们来聊聊 JVM(Java 虚拟机)的垃圾收集器(Garbage Collector,简称 GC)。
很多人一听到“垃圾回收”就头疼,觉得又是 CMS、又是 G1、又是 ZGC……名字多、参数杂、原理难。
别担心!今天我用 极简 + 类比 + 口诀 的方式,帮你轻松记住主流垃圾收集器的核心特点!


🧠 一句话理解垃圾回收

GC 就是 JVM 的“保洁阿姨”——她负责打扫堆内存里的“垃圾对象”,好腾出空间给新对象住。


🗺️ 垃圾收集器全图速览(截至 JDK 17)

分代新生代收集器老年代收集器
经典组合Serial、ParNew、Parallel ScavengeSerial Old、Parallel Old、CMS
统一收集器—G1、ZGC、Shenandoah

✅ 注意:JDK 8 及以前常用“分代收集”,JDK 9+ 推荐用 G1,JDK 11+ 开始支持 ZGC/Shenandoah。


🧩 四大“保洁阿姨”风格(容易记!)

1. Serial(串行阿姨) → “一个人干活,安静高效”

  • 特点:单线程,停顿全场(Stop-The-World)
  • 适用:小型应用、客户端程序、内存小(<100MB)
  • 口诀:“单干小能手,省电又省心”

2. Parallel(并行阿姨) → “全家总动员,干得快但吵”

  • 新生代叫 Parallel Scavenge,老年代叫 Parallel Old
  • 特点:多线程并行,吞吐量高(适合后台计算)
  • 目标:最大化 CPU 利用率,适合“跑批任务”
  • 口诀:“人多力量大,吞吐顶呱呱”

3. CMS(并发阿姨) → “边干活边打扫,怕吵用户”

  • 全名:Concurrent Mark Sweep(并发标记清除)
  • 特点:尽量和用户线程并发运行,低延迟
  • 缺点:占用 CPU、会产生内存碎片、JDK 14 被移除!
  • 口诀:“并发打扫快,碎片它不睬”

⚠️ 记住:CMS 是“尽力而为”,但可能失败(会退化成 Serial Old)!


4. G1(分区阿姨) → “划区管理,又快又稳”

  • G1 = Garbage First
  • 特点:
    • 把堆分成 多个小区域(Region)
    • 优先回收垃圾最多的区域(“垃圾优先”)
    • 可预测停顿时间(比如“最大停顿200ms”)
  • 适用:大堆(4GB~几十GB)、需要低延迟 + 高吞吐平衡
  • 口诀:“分区垃圾先,停顿可预言”

✅ JDK 9 起默认 GC!


5. ZGC / Shenandoah(超新星阿姨) → “几乎不停顿!”

  • 目标:停顿时间 < 10ms,即使堆有 TB 级!
  • 原理:并发压缩 + 指针着色(ZGC) / 并发复制(Shenandoah)
  • 适用:超大堆、实时系统(如金融交易、游戏服务器)
  • 口诀:“ZGC 闪电侠,停顿看不见!”

📌 ZGC 从 JDK 11 开始实验,JDK 15 转正;Shenandoah 需 OpenJDK(Oracle JDK 不包含)。


🧠 终极记忆口诀(背这一段就够了!)

“小用 Serial,吞用 Parallel,
低延选 CMS(已淘汰),
平衡用 G1,
超快上 ZGC!”


🔚 总结:如何选 GC?

场景推荐 GC
小程序、测试Serial
后台计算、吞吐优先Parallel
老项目(JDK 8)CMS(但建议迁移到 G1)
通用生产环境(JDK 8~17)G1 ✅
超大堆 + 超低延迟(JDK 11+)ZGC / Shenandoah

希望这篇博客让你 轻松记住 JVM 垃圾收集器!
下次面试被问到 GC,你可以笑着说:“哦,就是那几位保洁阿姨嘛~”

💡 小贴士:实际调优时,先用默认 GC(G1),再根据监控(如 GC 日志、Prometheus)调整,不要过早优化!


作者:一个爱用比喻记技术的程序员
发布时间:2025年
标签:#JVM #GC #Java #性能调优 #程序员入门

【多模态大模型】GLIP:零样本目标检测新范式与视觉语言理解 本文深入解析了多模态大模型GLIP在零样本目标检测和视觉语言理解领域的创新应用。GLIP通过统一目标检测与自然语言理解任务,实现了零样本学习能力,能够精准定位复杂文本描述对应的图像区域。文章详细介绍了GLIP的核心技术、数据策略及实战表现,并对比了与其他多模态模型的差异,为AI视觉理解提供了新范式。 阅读详情

相关推荐

深度强化学习-D3QN算法原理与代码

Dueling Double Deep Q Network(D3QN)算法结合了Double DQN和Dueling DQN算法的思想,进一步提升了算法的性能。如果对Doubel DQN和Dueling DQN算法还不太了解的话,可以参考我的这两篇博文:深度强化学习-Doubel DQN算法原理与代码和深度强化学习-Dueling DQN算法原理与代码,分别详细讲述了这两个算法的原理以及代码实现。本文就带领大家了解一下D3QN算法,代码链接见下方。 代码:https://github.com/indigo

weixin_46133643的博客 2万+

JVM之历代垃圾收集器详解

JVM之历代垃圾收集器讲解总览分类并行和并发年轻代垃圾回收器Serial收集器特点优点缺点PartNew收集器特点:Parallel Scavenge收集器特点老年代垃圾回收器Serial Old收集器Parallel Old收集器组合CMS收集器特点工作流程1.初始标记2.并发标记3.重新标记4.并发清除G1 收集器特点实现优点缺点工作流程总结 总览 分类 一,采用分代理念的垃圾回收器: 1.年轻代: Serial PartNew Parallel Scavenge 2.老年代: CMS Serial O

北洋的博客 2120

5g LDPC编译码-LDPC编码

本文摘要:LDPC编码是5G业务信道的核心编码技术,属于线性分组码。5G中LDPC编码分为两种基图类型(BG1和BG2),通过码块分割、CRC处理等步骤实现。编码过程主要涉及校验矩阵生成和校验位计算,其中校验矩阵采用稀疏矩阵结构。文中详细介绍了5G LDPC编码的具体实现流程,包括码块分割规则、校验位生成方法,以及两种基图(BG1和BG2)在矩阵结构和参数设置上的差异,重点阐述了通过模块化方法求解校验比特位的技术路径。

weixin_38270585的博客 1365

JVM知识总结,一定要记住它。

Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性进行垃圾回收的过程中,会涉及对象的移动。为了保证对象引用更新的正确性,必须暂停所有的用户线程,像这样的停顿,虚拟机设计者形象描述为「Stop The World」。也简称为STW。

weixin_44831330的博客 515

FLUENT UDF编译及蒸发冷凝相关问题

蒸发冷凝与相间传质

weixin_48029137的博客 1万+

PSIM仿真实战:反激电源从设计到调试的完整流程(附短路保护配置)

本文详细介绍了使用PSIM仿真工具进行反激电源从设计到调试的完整流程,包括变压器参数设计、功率器件选型、动态特性调试以及短路保护配置。通过实战案例和仿真技巧,帮助工程师提前暴露并解决设计中的常见问题,如负载突变、输入电压波动和短路保护失效等,显著降低硬件试错成本。

weixin_29216353的博客 244

第一次如何记住繁杂的垃圾收集器

第一次如何记住繁杂的垃圾收集器 首先在学习垃圾收集器之前,你一定要知道JVM内存模型和常见的垃圾回收算法。 连线代表相互之间可以配合使用,G1则在新生代和老年代都使用; 简单介绍 垃圾收集器可以分为串行(Ser)、并行(par)、**响应时间优先(CMS)**来记。 年轻代: 最早出现的是单线程的 — > Serial 并行的 ----- > ParNew 吞吐量优先的(不关注单次GC时间) ----- > Parallel Scavenge(一般客户端) 老年代: Seria

cheerful_man的博客 423

DVWA全级别详细通关教程

dvwa全级别详细通关教程,暴力破解,命令注入,CSRF跨站请求伪造,文件包含,文件上传​,SQL注入,XSS

m0_62063669的博客 1万+

Intellij JVM Options Explained:G1GC与CMS垃圾收集器对比分析

想要让IntelliJ IDEA运行得更快更流畅吗?终极指南来了!本文将深入解析IntelliJ JVM选项,重点对比G1GC与CMS两大垃圾收集器,帮助您优化IDE性能。无论您是Java开发新手还是经验丰富的开发者,这篇完整教程都将为您提供简单实用的配置技巧。 ## IntelliJ JVM选项基础入门 IntelliJ IDEA作为最流行的Java集成开发环境,运行在Java虚拟机(JVM

gitblog_00215的博客 1103

PotPlayer 史诗级更新!实时字幕生成+实时翻译,看片真的无敌了!

potplayer已经更新实时字幕生成+实时字幕翻译功能

阿虚同学的博客 1万+

利用插件扩展 Qt 应用程序

不仅 Qt 本身可以通过插件进行扩展,而且 Qt 应用程序也可以通过插件来扩展,这需要应用程序使用 `QPluginLoader` 检测和加载插件。

青春不老,奋斗不止! 1万+

JVM垃圾收集器终极指南:Serial、Parallel、CMS与G1四大收集器深度对比与选择策略

JVM垃圾收集器是Java虚拟机内存管理的核心组件,直接影响应用的性能和稳定性。本文基于2018-Java-Interview项目,深度解析Serial、Parallel、CMS、G1四大主流垃圾收集器的原理、特点和应用场景,帮助你做出最佳选择。🎯 ## JVM垃圾收集器概述 JVM垃圾收集器负责自动回收不再使用的内存空间,防止内存泄漏。不同的收集器采用不同的算法和策略,在吞吐量、延迟和内存

gitblog_00176的博客 1007

黑猫带你学eMMC协议第12篇:生产状态感知(PSA)

1 概述 1.1 什么是PSA Production State Awareness (PSA) 生产状态感知 e•MMC设备可以利用其是否在生产环境中的信息,从而在现场运作时进行不同的操作。 例如,在设备低温焊接(soldering)前,将数据写入emmc,可能导致数据出错,而正在焊接期间写入数据,出错的概率可能会更大。在低温焊接之前,emmc设备可以使用一种特定的内部操作去加载内容,这样就能减少数据出错的概率,而在低温焊接后进行常规的操作就行了。 1.2 psa如何进行工作? PSA存在于emmc5.0

黑猫奥利奥的博客 4262

轻松永远记住经典jvm参数​

jvm的参数有很多,必须知道参数分类并且记住面试常见的几个参数。

IT乐知 390

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Jvm你最需要记住的知识点

jvmjvm是什么jvm模型程序计数器java虚拟机栈本地方法栈堆方法区jdk1.8的改变类加载的过程类加载器的种类类加载机制 jvm是什么 虚拟机,一种能够运行java 字节码的虚拟机。 类加载子系统 加载.class 文件到内存。 内存结构 运行时的数据区。 执行引擎 执行内存中的.class,输出执行结果(包含GC:垃圾收集器)。 本地方法的接口。 本地方法库。 jvm模型 程序计数器 就是一个指针,指向方法区中的方法字节码(用来存储指向下一个指令的地址,也即将要执行的指令代码),由执行引擎读

mr-yhl的博客 371

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

学习提高:JVM垃圾收集器,垃圾回收算法,一个对象从创建到回收的过程。

每次 YGC 的时候,它们将存活的对象复制到未使用的那块空间,然后将当前正在使用的空间完全清除,交换两块空间的使用状态。当前大多商用虚拟机都采用这种分代收集算法,这个算法并没有新的内容,只是根据对象的存活的时间的长短,将内存分为了新生代和老年代,这样就可以针对不同的区域,采取对应的算法。-------------欢迎各位留言交流,如有不正确的地方,请予以指正。整理:让存活的对象,向内存的一端移动,然后直接清理掉没有用的内存。

做技术,贵在学习与坚持! 370

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

JVM垃圾收集器基准报告 – Ionuț Baloșin 如何选择适合你的垃圾回收器

本文使用一组不同的模式描述了一系列Java虚拟机(JVM)垃圾收集器(GC)微基准及其结果。对于当前问题,我包括了AdoptOpenJDK 64位服务器VM版本13(内部版本13 + 33)中的所有垃圾收集器: 串行GC Parallel / ParallelOld GC(启动Java 7u4 ParallelGC和ParallelOld GC基本上是同一收集器) 并发标记扫描CMS GC(目前不建议使用,它将根据JEP 363在Java 14版本中删除) 垃圾优先G1 GC Shenandoah

gaohaicheng123的博客 855

JVM监控和查看

一、性能调优 1.1 性能调优的目的        减少minor gc的频率、将转移到老年代的对象数量降低到最小以及减少full gc的次数,调优的关键是找到性能的瓶颈 #此图来自:http://uule.iteye.com/blog/2114697 1.2 性能调优的手段 #文字内容来自:http://blog.youkuaiyun.com/wfzczangpeng/article/deta...

mnasd的博客 1万+

jvm内存参数配置_轻松永远记住经典jvm参数

jvm的参数有很多,必须知道参数分类并且记住面试常见的几个参数。一、jvm参数分类根据jvm参数开头可以区分参数类型,共三类:"-"、"-X"、"-XX",标准参数(-):所有的JVM实现都必须实现这些参数的功能,而且向后兼容;例子:-verbose:class,-verbose:gc,-verbose:jni……非标准参数(-X):默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,...

weixin_39922642的博客 232

weblogic12c 设置jvm大小_轻松永远记住经典jvm参数

jvm的参数有很多,必须知道参数分类并且记住面试常见的几个参数。一、jvm参数分类根据jvm参数开头可以区分参数类型,共三类:"-"、"-X"、"-XX",标准参数(-):所有的JVM实现都必须实现这些参数的功能,而且向后兼容;例子:-verbose:class,-verbose:gc,-verbose:jni……非标准参数(-X):默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,...

weixin_42360711的博客 686

JVM总结上篇

JVM(Java Virtual Machine)是Java程序的运行环境,它是一个虚拟的计算机,可以在不同的平台上运行Java程序,实现了Java程序的跨平台性。JVM包括类加载器、解释器、即时编译器、垃圾收集器等组件。类加载器:类加载器负责将Java类文件加载到JVM中,Java程序在运行时会根据需要动态加载类文件。JVM中有三种类加载器,分别是Bootstap ClassLoader、Extension ClassLoader和System ClassLoader。

一生烟雨的博客 922

面试阿里我竟然倒在这一JVM面试题下

面试阿里我竟然倒在这一JVM面试题下 前言: 面试阿里倒在了JVM垃圾回收机制,何时触发MinorGC等操作这道面试题下,回去重新刷了一遍常问的JVM面试题,特意整理出22道分享给大家。八月已经来临了,离跳槽高峰金九银十还远嘛,是时候为了跳槽为了高薪奋斗了,后续也会更新更多各方面的面试题,大家记得关注我哦,由于篇幅的限制本文只有前十个在文章中带答案,之后的需要答案的可以关注我的...

Javazhoumou的博客 8428

看懂这6张图,理解JVM内存布局就没问题了!

原文链接:https://segmentfault.com/a/1190000021424972 作者:Richard_Yi 转载于:https://mp.weixin.qq.com/s/7bGtO9NfakQNHHcT26Ia7Q 目录: 目录 前言 概览 一、Heap (堆区) 1.1 堆区的介绍 1.2 堆区的调整 1.3 堆的默认空间分配 1.4 堆溢出 演示 创建一个新对象 内存分配流程 二、Metaspace 元空间 三、 Java 虚拟机栈 1. 局部变量表 .

Dream_xun的专栏 1260

JVM学习笔记(一)(JVM介绍、JVM内存结构、垃圾回收),看这篇文章就够了

JVM学习笔记(JVM从入门到实战),看这篇文章就够了 1_介绍 01_01_什么是JVM 02_学习JVM有什么用? 03_常见的JVM 04_学习路线 2_内存结构 01_程序计数器(线程私有) 02_栈-线程栈(线程私有) 03_本地方法栈(线程私有) 04_堆(线程共享) 05_方法区(线程共享) 06_直接内存 3_垃圾回收 01_判断对象是否可以回收 02_回收算法 03_分代回收 03_1相关VM参数 04_垃圾收集器 04_1相关VM参数 04_2吞吐量优先回收

Java技术大联盟 590

jvm从内存模型到垃圾收集器

JVM结构 JVM垃圾回收机制 对Java内存模型的理解 g1和cms区别 volatile classpath的理解

白衣若尘的博客 194

JVM常见面试题。答题思路,问题解析,全方位讲解。小白必看!

思路: 描述栈定义,再描述为什么会溢出,再说明一下相关配置参数,OK的话可以给面试官手写是一个栈溢出的demo。局部变量表,操作数栈,动态链接,方法出口等信息。局部变量表又包含基本数据类型,对象引用类型归调用产生这种结果。扩展,或者在新建立线程的时候没有足够的内存去创建对应的虚拟机栈,那么Java虚拟机将抛出一个OutOfMemory 异常。(线程启动过多)

2301_82242844的博客 681
上一篇: 监控报警内存 90%+排查记录
下一篇: Java 线程池:像管理餐厅一样简单!
旷野说
博客等级 码龄9年 361粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值