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
扫描范围 新生代 整个堆
执行时间 毫秒级 秒级甚至更长
触发频率
对应用影响
算法复杂度 简单 复杂
相关推荐
翩若惊鸿_2 小时前
【无标题】
开发语言·c#
Da Da 泓2 小时前
多线程(七)【线程池】
java·开发语言·线程池·多线程
To Be Clean Coder2 小时前
【Spring源码】getBean源码实战(三)
java·mysql·spring
杰瑞不懂代码2 小时前
基于 MATLAB 的 BPSK/QPSK/2DPSK 在 AWGN 信道下的 BER 性能仿真与对比分析
开发语言·matlab·qpsk·2psk·2dpsk
Wokoo72 小时前
开发者AI大模型学习与接入指南
java·人工智能·学习·架构
小鸡脚来咯3 小时前
python虚拟环境
开发语言·python
龘龍龙3 小时前
Python基础(九)
android·开发语言·python
电摇小人3 小时前
我的“C++之旅”(博客之星主题作文)
java·开发语言
资生算法程序员_畅想家_剑魔3 小时前
Java常见技术分享-23-多线程安全-总结
java·开发语言
ytttr8733 小时前
MATLAB中CVX凸优化工具箱的使用指南
开发语言·matlab