当前位置: 首页 > news >正文

面试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 会清理整个堆和方法区,耗时长,应该尽量避免。

http://www.xdnf.cn/news/1427905.html

相关文章:

  • STL库——deque/priority_queue
  • 【爬油管搜索视频软件】youtube爬虫工具,根据关键词采集搜到的视频数据
  • 数据分析与挖掘工程师学习规划
  • React学习教程,从入门到精通, React 入门指南:React JSX 语法知识点详解及案例代码(8)
  • 工业界实战之数据存储格式与精度
  • MySQL 事务隔离与 MVCC
  • MySQL事务+MVCC(精简版,包教包废)
  • 【彻底搞懂Java垃圾回收机制(附调优参数)】
  • 从电脑底层到进程创建:一篇看懂冯诺依曼、OS和进程
  • 【Qt开发】按钮类控件(二)-> QRadioButton
  • 【译】更好地控制您的 Copilot 代码建议
  • ResponseBodyEmitter介绍
  • Linux IPv4路由子系统深度解析
  • 什么是Token?——理解自然语言处理中的基本单位
  • 基于单片机颜色识别分拣系统设计
  • AI 生成视频入门:用 Pika Labs+Runway ML 制作短内容
  • 4.MySQL数据类型
  • day42-单片机
  • 【Linux基础知识系列:第一百一十六篇】使用mt进行磁带驱动管理
  • 第三家公司虽然用了powerbi,但更适合用excel
  • Flutter环境搭建全攻略之-windows环境搭建
  • 奔赴MOBILITY China 2026深圳新能源汽车技术展,共鉴行业高光时刻
  • 从零开始在Ubuntu上快速部署Docker和Dify:结合 Dify + 蓝耘 MaaS平台打造 AI 应用实战指南
  • Web基础学习笔记01
  • 计算机视觉与深度学习 | 视觉里程计技术全解析:定义、原理、与SLAM的关系及应用场景
  • Spring Boot 日志框架选择指南:Logback vs Log4j2
  • 破解能源密码——人造太阳:可控核聚变技术进展
  • 光储充一体化智慧能源平台助力某能投公司绿色能源转型
  • 【面试场景题】如何理解设计模式
  • 为什么研发文档的变更缺乏审批和追溯