面试tips--JVM(4)--Minor GC & Major GC & Full GC

1️⃣ JVM 堆结构回顾

在 HotSpot JVM 的分代内存模型中,堆大致分为:

  • 新生代(Young Generation)

    • Eden 区

    • Survivor 区(From/To)

  • 老年代(Old Generation)

  • 方法区 / 元空间(Metaspace)

👉 GC 的不同类型主要是针对这些区域。


2️⃣ Minor GC

  • 触发条件:Eden 区满时触发。

  • 回收范围:新生代(Eden + Survivor)。

  • 特点

    • 发生频率高(因为对象朝生夕死,Eden 很快满)。

    • 速度快(复制算法 + 新生代对象存活率低)。

    • 不会影响老年代。

  • 流程(复制算法)

    1. 存活对象从 Eden + From Survivor 复制到 To Survivor。

    2. Survivor 区不够时,部分对象晋升到老年代。


3️⃣ Major GC(Old GC)

  • 触发条件

    • 老年代满时触发。

    • Survivor 区对象晋升失败(老年代空间不足)。

  • 回收范围:老年代。

  • 特点

    • 发生频率低(老年代对象存活时间长)。

    • 回收速度慢(老年代对象多,使用 标记-清除 / 标记-整理)。

    • 可能会伴随一次 Minor GC(因为要腾出 Survivor 的空间)。


4️⃣ Full GC

  • 触发条件

    • 调用 System.gc()(只是建议,JVM 可忽略)。

    • 老年代空间不足。

    • 方法区 / 元空间不足。

    • Minor GC 后晋升失败。

  • 回收范围:整个堆(新生代 + 老年代)+ 方法区/元空间。

  • 特点

    • 最彻底的 GC。

    • 速度最慢,STW(Stop-The-World)时间长。

    • 应该尽量避免频繁发生 Full GC。


5️⃣ 三者对比总结表

GC 类型 回收区域 触发条件 算法 速度 频率
Minor GC 新生代(Eden + Survivor) Eden 满 复制 高频
Major GC 老年代 老年代满 / 晋升失败 标记整理 低频
Full GC 整个堆 + 方法区/元空间 System.gc() / 老年代不足 综合 最慢 尽量少

6️⃣ 小结

  • Minor GC:轻量、频繁、只回收新生代。

  • Major GC:主要清理老年代,速度比 Minor GC 慢。

  • Full GC:清理整个堆和方法区,最彻底但最耗时,应避免频繁发生。


⚡ 常见面试题:

👉 "Minor GC 和 Full GC 的区别是什么?"

  • Minor GC 只清理新生代,发生频繁且速度快;

  • Full GC 会清理整个堆和方法区,耗时长,应该尽量避免。

相关推荐
Boop_wu30 分钟前
[Java EE] 多线程进阶(JUC)(2)
java·jvm·算法
Baihai_IDP2 小时前
剖析大模型产生幻觉的三大根源
人工智能·面试·llm
Hacker_Oldv2 小时前
API 自动化测试难点总结与分享
自动化测试·软件测试·职场和发展
Croa-vo2 小时前
TikTok 数据工程师三轮 VO 超详细面经:技术深挖 + 建模推导 + 压力测试全记录
javascript·数据结构·经验分享·算法·面试
czlczl200209253 小时前
算法:组合问题
算法·leetcode·职场和发展
CoderYanger3 小时前
优选算法-字符串:63.二进制求和
java·开发语言·算法·leetcode·职场和发展·1024程序员节
3***31213 小时前
java进阶1——JVM
java·开发语言·jvm
Cx330❀3 小时前
C++ STL set 完全指南:从基础用法到实战技巧
开发语言·数据结构·c++·算法·leetcode·面试
CoderYanger12 小时前
优选算法-栈:67.基本计算器Ⅱ
java·开发语言·算法·leetcode·职场和发展·1024程序员节
han_13 小时前
前端高频面试题之CSS篇(一)
前端·css·面试