JVM优化入门指南:JVM垃圾收集器(GC)介绍

JVM垃圾收集器(GC)类型

主要GC类型:

  1. Serial GC

    • 单线程收集器
    • 适用于单核处理器或小应用
  2. Parallel GC(Paraller Scavenge)

    • 多线程新生代收集器
    • 注重吞吐量优化
  3. CMS(Concurrent Mark Sweep) GC

    • 并发收集器
    • 减少停顿时间
  4. G1(Garbage First) GC

    • 分区收集器
    • 可预测停顿时间
  5. ZGC/Shenandoah

    • 超低延迟收集器
    • JDK 11+支持

GC 类型 vs GC 行为

5 种主要 GC 类型:

  • Serial GC
  • Parallel GC
  • CMS GC
  • G1 GC
  • ZGC/Shenandoah

2 种 GC 行为:

  • Minor GC:清理新生代
  • Full GC:清理整个堆(包括新生代和老年代)

关系说明

每种 GC 类型都会执行这两种 GC 行为:

  • Minor GC 是所有 GC 类型都有的行为,专门清理 Young Generation
  • Full GC 也是所有 GC 类型都可能触发的行为,清理整个堆内存

例如:

  • 使用 G1 GC 时会发生 Young GC(相当于 Minor GC) 和 Mixed GC/Full GC
  • 使用 CMS GC 时会发生 Minor GCCMS GC(相当于 Full GC)

所以 Minor GC 和 Full GC 是垃圾回收的作用范围和触发条件的分类,而不是独立的 GC 收集器类型。

Minor GC与Full GC区别

Minor GC(年轻代GC)

  • 作用范围 : 只清理 新生代 (Young Generation)
  • 触发条件 :
    • Eden区空间不足时自动触发
  • 特点 :
    • 执行速度快
    • 发生频率高
    • 清理大量短生命周期对象
    • STW(Stop-The-World)时间短

Full GC(老年代GC)

  • 作用范围: 清理整个堆内存(包括新生代和老年代)
  • 触发条件 :
    • 老年代空间不足
    • 方法区(元空间)满
    • 显式调用 System.gc()
    • Minor GC后存活对象无法放入Survivor区或老年代
  • 特点 :
    • 执行速度慢
    • STW时间长
    • 影响应用性能
    • 通常伴随内存整理操作

性能对比

特性 Minor GC Full GC
扫描范围 新生代 整个堆
执行时间 毫秒级 秒级甚至更长
触发频率
对应用影响
算法复杂度 简单 复杂
相关推荐
郝学胜-神的一滴39 分钟前
Effective Python 条款 10 :海象运算符_=
开发语言·python·程序人生·开源
wuyk55541 分钟前
Python零基础入门第十四章:异常处理(try-except)
开发语言·python
wuyk5551 小时前
【Socket 进阶之路】第 3 章 TCP 三次握手 & 四次挥手深度剖析|连接建立、断开、状态机、TIME_WAIT 核心工程问题
服务器·开发语言·网络·物联网·网络协议·tcp/ip
allnlei1 小时前
s6-overlay - 装在 Docker 容器里的轻量级管家
java·docker·容器
彧azz6 小时前
图的存储结构详解:邻接矩阵的原理、实现与应用
开发语言·数据结构·学习·php
IT_Octopus7 小时前
IntelliJ 本地日志路径自定义:`-DLOG_PATH=./logs` 为什么总“不听话“
java·log4j·intellij-idea
嵌入式学习菌7 小时前
Modbus‑RTU 数据类型分析
开发语言·单片机·bug
长征coder7 小时前
【无标题】
java·性能优化
matlab代码8 小时前
基于matlab数字图像处理的指纹识别系统【源码68期】
开发语言·matlab
新时代牛马8 小时前
PCI与PCIe 硬件原理、配置空间/BAR 与 Linux 驱动完整篇:从 LTSSM、TLP 到 ECAM 与probe
java·linux·服务器