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
扫描范围 新生代 整个堆
执行时间 毫秒级 秒级甚至更长
触发频率
对应用影响
算法复杂度 简单 复杂
相关推荐
long31626 分钟前
封装(Encapsulation)
java·人工智能·ai·ai编程
SomeB1oody26 分钟前
【RustyML入门】7.2. 深入模型持久化
开发语言·后端·机器学习·rust·教程
yaoxin52112328 分钟前
502. Java 反射 - 编写 MessageInterceptor 类
java·开发语言
wuyk55531 分钟前
Python零基础入门第五章:元组Tuple(不可变容器详解、列表与元组区别)
开发语言·python
风流 少年32 分钟前
Spring AI 2.0:阿里云百炼平台(工作流应用)
java·后端·spring
长谷深风11137 分钟前
AI Tool 设计:粒度、参数与错误恢复怎么做
java·大数据·人工智能·ai agent·agent工作流·智能体设计·ai产品设计
2601_9657984738 分钟前
Build a Fast, High-Ranking Restaurant Website with Rolanda Theme
开发语言·ios·swift
caimouse42 分钟前
ReactOS 窗口系统分析(25):标题栏显示与系统按钮 — nonclient.c 标题栏专题
c语言·开发语言
诺伦1 小时前
Rust 错误处理实战:从 unwrap 到优雅 Result 的进阶之路
开发语言·后端·rust
caimouse1 小时前
ReactOS 窗口系统分析(14):计时器/属性/加速键/热键 — timer.c + prop.c + accelerator.c + hotkey.c
c语言·开发语言·reactos