Java 垃圾回收机制详解(GC机制全解析)

一、前言

在 Java 面试中,垃圾回收机制(Garbage Collection, GC) 是高频考点之一。理解 GC 不仅有助于编写高性能代码,也能帮助定位内存泄漏、优化系统性能。

二、Java 内存区域概览

区域作用是否受GC管理
程序计数器线程执行位置记录
JVM栈方法调用栈帧
堆 (Heap)对象实例与数组存储区域
方法区(Metaspace)类元信息、静态变量、常量池✅(部分)

三、对象存活判断:如何确定垃圾?

可达性分析算法(Reachability Analysis) 是现代 JVM 的主流方法:

  • 从 GC Roots 出发沿引用链寻找可达对象
  • 不可达对象即为垃圾
  • GC Roots 包括栈变量、静态变量、本地方法栈引用

四、垃圾回收算法分类

算法思想特点适用
标记-清除标记后清除未标记对象实现简单、碎片多老年代
复制算法将存活对象复制到新空间无碎片、效率高新生代
标记-整理标记后移动对象压缩空间减少碎片老年代
分代收集根据生命周期分代管理综合性能最佳

五、堆的分代模型

堆被划分为新生代、老年代和元空间。新生代采用复制算法,老年代采用标记-整理算法。

六、常见的垃圾收集器

收集器特点适用场景
Serial GC单线程、简单客户端模式
Parallel GC多线程、高吞吐服务器默认
CMS并发、低延迟Web 服务
G1区域化收集、可预测停顿大内存应用
ZGC / Shenandoah超低延迟(<10ms)高并发场景

七、GC 调优建议

  1. 分析 GC 日志,观察停顿时间和频率
  2. 合理设置堆大小 (-Xms, -Xmx)
  3. 选择合适的收集器
  4. 减少临时对象创建
  5. 使用对象池或软引用

八、面试常见问题

  • 为什么不用引用计数?—— 无法处理循环引用
  • Minor GC 与 Full GC 区别?—— 前者回收新生代,后者回收整个堆
  • CMS 缺点?—— 浮动垃圾、碎片多
  • G1 优势?—— 可预测停顿、并行并发

九、总结

Java GC 的核心是 自动化内存管理。从 Serial GC 到 ZGC,JVM 垃圾回收机制不断演进以实现低延迟与高吞吐。

posted @ 2025-10-24 21:27  Jessica837488  阅读(0)  评论(0)    收藏  举报