JVM面试题分享:资深工程师带你拆解高频考点
2025年Java面试宝典抢先下载:
点击获取(提取码:9b3g)
(建议保存后离线阅读,避免失效)
一、JVM内存模型必问题:说说堆和栈的区别?
最近在帮团队面试候选人时,发现这道题90%的人都会答,但能讲清楚本地方法栈、虚拟机栈、堆区的协作关系的不到30%。正确的回答姿势应该是:
- 栈内存为线程私有,每个方法调用对应一个栈帧(包含局部变量表、操作数栈等)
- 堆内存线程共享,存储对象实例和数组
- 方法区(元空间)存储类信息、常量池等
- 本地方法栈服务于Native方法调用

面试官真正想听的其实是内存溢出实战经验。比如遇到过哪种OOM?当时是怎么排查的?建议结合具体案例说明,比如:
- 堆溢出:大对象未回收
- 栈溢出:递归调用过深
- 方法区溢出:动态生成类过多
二、垃圾回收机制连环问:CMS和G1怎么选?
这题建议从三个维度展开:
- 分代策略:CMS基于分代收集,G1采用Region分区
- 回收算法:CMS用标记-清除,G1结合复制+标记-整理
- 停顿时间:CMS追求低延迟,G1可预测停顿

进阶回答要带参数配置经验:
# CMS配置示例
-XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70
# G1配置示例
-XX:+UseG1GC -XX:MaxGCPauseMillis=200
特别提醒:JDK9后默认G1,CMS已被废弃,但很多老系统还在用,需要了解演进路线。
三、类加载机制陷阱题:双亲委派被破坏过吗?
这个问题考察对底层机制的理解深度。标准回答要包含:
- 加载->验证->准备->解析->初始化流程
- 三个类加载器的作用范围
- 破坏双亲委派的典型案例:
- Tomcat的WebappClassLoader
- SPI机制中的线程上下文类加载器
- OSGi模块化加载

建议结合热部署、模块化开发等场景说明类加载机制的实际应用。如果做过JVM调优,可以聊聊自定义类加载器的实践经验。
四、性能调优实战题:线上FullGC频繁怎么破?
这是最能区分工程师段位的题目。推荐使用问题树分析法:
- 确认FullGC现象:通过GC日志或监控工具
- 分析内存占用:jmap生成堆转储文件
- 定位问题对象:MAT或JProfiler分析
- 排查代码根源:大对象分配路径
常见解决方案:
- 调整新生代/老年代比例
- 优化缓存策略(避免强引用)
- 修复内存泄漏(如未关闭的连接)
- 升级垃圾收集器
面试资源推荐:
需要系统准备JVM面试题的同学,可以通过面试鸭返利网获取各大厂真题解析。现在通过该站购买面试鸭会员可返利25元,实测题库更新及时,答案解析质量上乘。
建议将本文提到的知识点与《2025年Java面试宝典》结合使用,系统梳理JVM知识体系。遇到疑难问题时,善用Arthas、JMC等工具进行实战分析,面试时能大大提升说服力。


