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++的UDP网络通信系统设计与实现
linux·c语言·开发语言·网络·c++·tcp/ip·udp
Trouvaille ~2 小时前
【Java篇】基石与蓝图::Object 类与抽象类的双重奏
java·开发语言·javase·抽象类·类与对象·基础入门·object类
卜锦元2 小时前
Golang中make()和new()的区别与作用?
开发语言·后端·golang
小光学长2 小时前
基于ssm的美妆产品推荐系统rah0h134(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·数据库·spring
Light602 小时前
破局“数据孤岛”:构建业务、财务、指标三位一体的智能数据模型
java·大数据·开发语言
中文很快乐2 小时前
从零到一:用 SpringBoot 打造 RESTful API 实战指南
java·spring boot·后端·restful
泉城老铁2 小时前
springboot+redis 如何实现订单的过期
java·后端·架构
guygg882 小时前
基于Matlab的压缩感知信道估计算法实现
开发语言·算法·matlab
哈哈哈笑什么2 小时前
在高并发分布式SpringCloud系统中,什么时候时候并行查询,提高查询接口效率,从10s到100ms
java·分布式·后端