Plantre Plantre
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

plantre

一个后端开发者
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机组成原理

  • 操作系统

  • 计算机网络

  • 设计模式

  • Java

    • Java基础

    • Java集合

    • Java并发

    • JVM

      • JVM内存模型
      • JVM垃圾回收中的道法术器
      • Minor GC,Major GC,Young GC,Old GC,Major GC有什么区别
      • Minor GC时老年代在干什么
      • ​​Major GC时年轻代在干什么
      • Full GC​时年轻代和老年代在干什么
      • 常用垃圾回收器对比
      • OOM、内存泄漏与内存溢出的区别解析
      • 类的加载机制
  • Spring

  • SpringCloud

  • MySQL

  • Redis

  • 分布式

  • Zookeeper

  • Dubbo

  • Kafka

  • 数据结构

  • 算法

  • OJ

  • 从道家哲学看计算机?
  • 后端
  • Java
  • JVM
plantre
2025-05-04

Minor GC,Major GC,Young GC,Old GC,Major GC有什么区别

Minor GC、Major GC、Young GC、Old GC的区别解析

在JVM的垃圾回收(GC)机制中,不同术语对应不同的回收区域和触发条件。以下从定义、作用区域、触发条件及算法特点四个维度进行详细区分:


一、核心概念对比

术语 定义 作用区域 触发条件 算法特点
Minor GC 针对新生代的垃圾回收,也称为Young GC。 新生代(Eden + Survivor) Eden区内存不足时触发。 复制算法(存活对象复制到Survivor区)
Major GC 通常指Old GC,即老年代垃圾回收;但部分资料将其等同于Full GC。 老年代 老年代空间不足(如晋升对象过多或大对象直接分配失败)。 标记-清除或标记-整理算法(如CMS)
Full GC 全局垃圾回收,覆盖整个堆(新生代+老年代)及方法区(元空间)。 全堆 老年代无法容纳晋升对象、方法区空间不足、显式调用System.gc()等。 标记-整理算法(如Serial Old)
Mixed GC G1收集器特有,同时回收新生代和部分老年代Region。 新生代+部分老年代 老年代占用达到阈值(默认45%)时触发。 分Region回收,优先处理垃圾最多区域

二、关键区别与常见误区

  1. Young GC与Minor GC的等价性
    • Young GC和Minor GC是同一概念的不同命名,均针对新生代,触发条件是Eden区满。例如,当Eden区无法分配新对象时,触发Young GC,存活对象会被复制到Survivor区,年龄达到阈值(默认15次)后晋升到老年代。

  2. Major GC的语义模糊性
    • Major GC通常指老年代回收(即Old GC),但部分文档(如《深入理解Java虚拟机》)将其与Full GC混用。例如,CMS收集器的Major GC仅回收老年代,而Parallel Old收集器的Major GC可能隐含Full GC。

  3. Full GC的触发复杂性
    • Full GC的触发场景多样,包括:

    ◦ 老年代空间不足以容纳晋升对象。

    ◦ 方法区(元空间)内存不足(JDK 8前为永久代)。

    ◦ 显式调用System.gc()(不保证立即执行)。

    • 性能影响:Full GC会暂停所有用户线程(STW),停顿时间可达秒级,需尽量避免。

  4. Mixed GC的优化逻辑
    • G1收集器的Mixed GC通过分Region回收策略,动态选择新生代和部分老年代进行回收,避免全堆扫描。例如,当老年代占用45%时,G1会触发Mixed GC以平衡吞吐量和延迟。


三、实际应用中的注意事项

  1. 术语使用规范
    • 在讨论GC类型时,需明确上下文。例如:

    ◦ CMS的Major GC仅指老年代回收。

    ◦ G1的Mixed GC不属于Full GC。

  2. 调优方向
    • 减少Full GC频率:

    ◦ 增大老年代空间(-Xmx参数)。

    ◦ 避免大对象直接进入老年代(-XX:PretenureSizeThreshold)。

    • 优化晋升策略:

    ◦ 调整晋升年龄阈值(-XX:MaxTenuringThreshold)。

    ◦ 监控Survivor区容量,避免过早晋升。

  3. 收集器选择
    • 高吞吐场景:Parallel Scavenge + Parallel Old。

    • 低延迟场景:G1或ZGC(停顿时间<10ms)。


总结 • Minor GC/Young GC:高频、快速的新生代回收。

• Major GC/Old GC:低频、耗时的老年代回收,需注意术语歧义。

• Full GC:全局回收,代价最高,需优先规避。

• Mixed GC:G1特有的混合回收模式,兼顾新生代和老年代效率。

通过合理配置JVM参数(如-Xmn调整新生代大小)和选择垃圾收集器,可显著优化GC性能。具体调优建议可结合GC日志分析工具(如GCEasy)进一步排查。

编辑 (opens new window)
上次更新: 2025/06/10, 09:18:05
JVM垃圾回收中的道法术器
Minor GC时老年代在干什么

← JVM垃圾回收中的道法术器 Minor GC时老年代在干什么→

最近更新
01
集成loki
07-04
02
TCP的ESTABLISHED是什么意思
06-24
03
安装1panel
06-24
更多文章>
Theme by Vdoing | Copyright © 2025-2025 plantre | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式