当前位置: 首页 > 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.dtcms.com/a/363378.html

相关文章:

  • 从理念到实践:三层解耦架构与“无系统”论
  • 59.螺旋矩阵II
  • 科研界“外挂”诞生了:科学多模态模型Intern-S1-mini开源
  • linux开发板(rk3568,树莓派)自动连接保存好的WIFI
  • 百度网盘基于Flink的实时计算实践
  • SpringMVC —— Spring集成web环境和SpringMVC快速入门
  • 微信小程序列表之分页、刷新、加载更多开发
  • [密码学实战]逆向工程常见工具合集及下载地址(四十七)
  • 顶级天才会思考什么问题
  • Unity切换平台资源重新编译缓慢
  • 嵌入式git分支管理策略
  • 江协科技STM32学习笔记补充之002 对比介绍 I²C 和 SPI 两种常见的串行总线接口
  • Linux 环境配置 Boost 库详细步骤
  • C++二维数组的前缀和
  • 高德开放平台智能眼镜解决方案,Rokid Glasses AR导航实测
  • 相较于传统AR矿物鉴定有哪些优势?
  • AR技术赋能风电运维:精准、高效、智能
  • Android 16k页面大小适配
  • 抄苹果作业,安卓「无视风险,继续安装」要被谷歌砍了?
  • ADB图片上传轮播
  • 2022版Unity创建时没有2D灯光(2D Light),没有Global LIght2D怎么办?
  • MYSQL 认识事务
  • Python实现多线程PDF抓取与下载脚本
  • 每秒扛住10万请求?RedissonRateLimiter 分布式限流器详解
  • 【机器学习深度学习】向量检索到重排序:RAG 系统中的优化实践
  • 好消息:Oracle 23ai 现已支持一键部署!
  • ThinkPHP的log
  • 使用 C 模仿 C++ 模板的拙劣方法
  • Flutter 3.35.2 主题颜色设置指南
  • 揭密设计模式:像搭乐高一样构建功能的装饰器模式