当前位置: 首页 > news >正文

12. JVM的垃圾回收器

1. JVM有哪些垃圾回收器

  • 串行垃圾收集器
  • 并行垃圾收集器
  • CMS(并发)垃圾收集器
  • G1垃圾收集器

1. 串行垃圾回收器(Serial GC)

Serial和Serial Old串行垃圾收集器,是指使用单线程进行垃圾回收,堆内存较小,适合个人电脑
Serial 作用于新生代,采用复制算法
Serial Old 作用于老年代,采用标记-整理算法

  • 算法:新生代(Copying),老年代(Mark-Sweep-Compact

  • 特点

    • 单线程执行,适用于单核 CPU 环境

    • 垃圾回收时会 STW(Stop-The-World),暂停所有应用线程

    • 适用于 客户端应用 或 小型应用

垃圾回收时,只有一个线程在工作,并且java应用中的所有线程都要暂停(STW),等待垃圾回收的完成。


2. 并行垃圾回收器(Parallel GC / Throughput GC)

Parallel New和Parallel Old是一个并行垃圾回收器,JDK8默认使用此垃圾回收器
Parallel New作用于新生代,采用复制算法
Parallel Old作用于老年代,采用标记-整理算法

  • 算法:新生代(Copying),老年代(Mark-Sweep-Compact

  • 特点

    • 多线程并行 执行垃圾回收,提高吞吐量

    • 适用于 多核 CPU 环境

    • 默认 GC 在 Java 8 及之前版本

    • 适用于 后台计算型应用(如批处理任务)

垃圾回收时,多个线程在工作,并且java应用中的所有线程都要暂停(STW),
等待垃圾回收的完成


3. 并行老年代垃圾回收器(Parallel Old GC)

  • 算法:老年代采用 Mark-Sweep-Compact(并行优化版)

  • 特点

    • 与 Parallel GC 搭配使用,优化老年代回收

    • 相比 Parallel GC,老年代回收效率更高


4. CMS 垃圾回收器(Concurrent Mark-Sweep GC)

CMS全称 Concurrent Mark sweep,是一款并发的、使用标记-清除算法的垃圾回收器,该回收器是针对老年代垃圾回收的,是一款以获取最短回收停顿时间为目标的收集器,停顿时间短,用户体验就好。其最大特点是在进行垃圾回收时,应用仍然能正常运行。

  • 算法:老年代采用 并发标记-清除(CMS)

  • 特点

    • 并发执行,减少 STW 时间,适用于 低延迟 应用

    • 不压缩内存,可能导致 内存碎片

    • 在 Java 14 后被移除


5. G1 垃圾回收器(Garbage-First GC)

  • 算法分 Region 收集(标记-整理 + 复制)

  • 特点

    • Java 9 及以后版本的默认 GC

    • 适用于 大堆内存(4GB+) 和 低延迟 场景

    • 可预测停顿时间(通过设定 -XX:MaxGCPauseMillis

    • 将堆划分为多个 Region,优先回收垃圾最多的 Region


垃圾回收器对比

GC 名称适用场景算法并行/并发低延迟大堆支持
Serial GC单核、客户端复制 + 标记-整理单线程
Parallel GC高吞吐量复制 + 标记-整理多线程
CMS GC低延迟(已废弃)并发标记-清除并发
G1 GC平衡吞吐和延迟分 Region 收集并发✅(4GB+)

JDK 版本默认 GC适用场景特点
JDK 8Parallel GC高吞吐量计算任务多线程并行,STW 较长
JDK 17G1 GC平衡吞吐与延迟分 Region 回收,低停顿

2. 问题总结 

2.1 说一下 JVM 的垃圾回收器?

在jvm中,实现了多种垃圾收集器,包括:

  • 串行垃圾收集器:Serial GC、Serial Old GC
  • 并行垃圾收集器:ParallelOld GC、ParNewGC
  • CMS(并发)垃圾收集器:CMS GC,作用在老年代
  • G1垃圾收集器,作用在新生代和老年代

上一篇   下一篇

http://www.dtcms.com/a/276082.html

相关文章:

  • LangChain 代理(Agents)学习
  • 网页五子棋-对战
  • python学习打卡:DAY 37 早停策略和模型权重的保存
  • web网站无法抓包排查;burp无法抓包情况
  • comfyUI-controlNet-线稿软边缘
  • c++中的STL
  • Day59
  • 智能制造——解读50页智能工厂系统集成总体解决方案【附全文阅读】
  • python学习打卡:DAY 40 训练和测试的规范写法
  • 深入详解:决策树在医学影像领域心脏疾病诊断的应用及实现细节
  • 苦练Python第9天:if-else分支九剑
  • 影刀rpa初级选择题答案-02网页自动化-源码-初级证书
  • 6. JVM直接内存
  • 菜鸟的C#学习(二)
  • 动手开发 MCP Server (Datawhale AI夏令营)
  • TensorBoard
  • 全栈开发知识
  • 计算机毕业设计springboot阳阳助农电商平台 基于Spring Boot的阳阳助农电商平台设计与开发 Spring Boot框架下的阳阳助农电商平台构建
  • 苦练Python第7天:布尔七日斩
  • 模拟电路--供复习和嵌入式学习
  • 威联通docker容器安装宝塔面板
  • VUE3 el-table 主子表 显示
  • ICCV2025 特征点检测 图像匹配 RIPE
  • 【Elasticsearch 】search_throttled
  • Spark计算性能优化实战指南
  • 面试现场:奇哥扮猪吃老虎,RocketMQ高级原理吊打面试官
  • 一文理解锂电池充电、过放修复与电量测量:从原理到实战
  • Redis Cluster 手动部署(小白的“升级打怪”成长之路)
  • 工业软件出海的ERP-PLM-MES一体化解决方案
  • MCP实验