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
扫描范围 新生代 整个堆
执行时间 毫秒级 秒级甚至更长
触发频率
对应用影响
算法复杂度 简单 复杂
相关推荐
天下无敌笨笨熊3 分钟前
C#异步开发探微
开发语言·c#
2401_833197733 分钟前
更优雅的测试:Pytest框架入门
jvm·数据库·python
后端AI实验室4 分钟前
等保三级整改,敏感数据加密,数十个系统——3个人用Cursor一周搞定了
java·ai
qq_334060216 分钟前
spring_springmvc_mybatis权限控制+boostrap实现UI
java·spring·mybatis
2301_793804696 分钟前
C++中的访问者模式变体
开发语言·c++·算法
2501_9454248010 分钟前
模板代码版本兼容
开发语言·c++·算法
sunwenjian88611 分钟前
Spring Boot 整合 Druid 并开启监控
java·spring boot·后端
m0_5180194813 分钟前
C++中的委托构造函数
开发语言·c++·算法
m0_7434703715 分钟前
高性能计算框架实现
开发语言·c++·算法
weixin_3077791315 分钟前
2025年中国研究生数学建模竞赛A题:通用神经网络处理器下的核内调度问题——解决方案与实现
开发语言·人工智能·python·数学建模·性能优化