JVM 垃圾回收过程和核心机制是什么?

考查重点:对象可达性、回收方式与停顿。GC从根对象追踪可达对象,再按收集器执行标记、复制或整理;分代利用对象寿命差异,说明哪些阶段会暂停业务线程

本题目录

参考答案

核心回答

JVM 垃圾回收主要完成三件事:判断对象是否仍被需要、选择回收范围、回收并整理内存。HotSpot 通常从 GC Roots 出发做可达性分析;无法通过相关引用链到达的对象才可能被回收,不是看到两个对象互相引用就认定存活。

回收时可采用标记清除、复制或标记整理,并按对象寿命与收集器设计组织分代或分区。部分阶段需要暂停应用线程(STW),部分工作可与应用并发。具体过程取决于JDK版本和收集器,不能把一个固定“Minor GC→Full GC”顺序当作全部JVM的共同流程。

各机制怎样配合

GC Roots包括栈中活跃引用、相关静态引用和JNI引用等。应用运行时引用还会变化,并发收集器需要写屏障、记忆集等机制追踪变化,保证标记与回收正确;这些机制会带来额外CPU和内存成本。

标记清除直接释放不可达对象空间,但可能留下碎片;复制把存活对象搬到其他空间,便于连续分配,但需要目标空间;标记整理移动存活对象,减少碎片,也有移动和更新引用的开销。

分代利用“多数对象寿命短”的经验,让年轻代回收不必每次扫描整个堆。以JDK21的G1为例,堆划成Region,年轻代和老年代是逻辑角色;回收选定区域时转移存活对象,整堆标记的一部分可与应用并发,关键阶段仍有STW。

追问

  • 为什么不能完全没有暂停? 收集器需要在某些阶段建立一致的观察点或完成引用处理;低延迟收集器缩短暂停,不代表完全不暂停。
  • GC后还有OOM? 可能是存活对象过多、内存泄漏、分配速度过快、堆或其他内存区域不足,应结合日志、分配率和对象保留路径定位。
  • 自动GC能替代关闭文件吗? 不能。文件、连接和锁应按资源生命周期及时释放,不能依赖对象何时被回收。

参考资料

相关面经

12 篇

虎牙

全栈开发
校招秋招一面
查看原面经 →
JVM 的分代 GC 机制

浩鲸

AI应用开发工程师(java方向,国内)
秋招一面
查看原面经 →
垃圾回收

华盛通

Java实习生
实习
查看原面经 →
了解垃圾回收器的机制吗?用的哪种?

恒生电子

软件开发工程师
一面、二面
查看原面经 →
JVM的垃圾回收机制介绍一下?

老虎国际

后端开发
实习一面、二面
查看原面经 →
Java内存管理是怎样的?垃圾回收机制是怎样的?
展开剩余 7 篇面经

百度

后端开发工程师
一面
查看原面经 →
Java的垃圾回收机制。

百度

面经合集
查看原面经 →
讲一下jvm的垃圾回收机制

去哪儿

AI 全栈开发工程师
秋招
查看原面经 →
垃圾回收GC过程

百度

Agent 应用开发工程师
秋招一面、二面、三面
查看原面经 →
讲一下jvm的垃圾回收机制

字节跳动

后端开发工程师
社招一面、二面、三面
查看原面经 →
讲讲垃圾回收机制,

滴滴

AI Agent 后端开发
查看原面经 →
垃圾回收机制是什么?

美团

全栈开发工程师
一面
查看原面经 →
GC,STW,G1,CMS

收录题集

1 个来源,共1 份题集

相关题目

4 题