JVM面试题深度解析

2025年 阅读约 13 分钟 面试指南 · Java面试

深入JVM面试核心考点,涵盖内存模型、垃圾回收、类加载机制、调优实战等高频面试题,助你拿下JVM面试。

一句话总结

JVM 是 Java 面试的深度考察点,核心考点:内存结构(堆/栈/方法区/元空间)、垃圾回收(算法+收集器选型)、类加载(双亲委派+打破场景)、调优实战(参数+日志分析)。每个知识点都有对应的深度解析文章

内存模型

Q:JVM内存结构是怎样的?

JVM内存分为5个区域:

堆(Heap):存放对象实例,GC的主要区域。分为新生代(Eden + S0 + S1)和老年代。

方法区/元空间:存放类信息、常量、静态变量。JDK 8后移到本地内存的元空间。

虚拟机栈:每个线程私有,存放局部变量表、操作数栈、动态链接等。

本地方法栈:为Native方法服务。

程序计数器:当前线程执行的字节码行号指示器。

📖 深入阅读:JVM 内存结构详解 · 对象创建过程 · OOM 排查实战

垃圾回收

Q:常见的垃圾回收器有哪些?

新生代回收器:Serial、ParNew、Parallel Scavenge

老年代回收器:Serial Old、CMS、Parallel Old

整堆回收器:G1、ZGC、Shenandoah

G1回收器特点:基于Region的内存布局,支持设定最大停顿时间目标,适合大内存应用。JDK 9后成为默认回收器。

ZGC特点:着色指针+读屏障实现并发整理,停顿时间不超过10ms,适合超大堆内存。

📖 深入阅读:GC 算法详解 · GC 收集器对比 · 引用类型详解

类加载机制

Q:类加载的过程是什么?

类加载分为5个阶段:加载→验证→准备→解析→初始化。

双亲委派模型:类加载器收到请求时,先委派给父类加载器,只有父类无法完成时才自己加载。保证Java核心类的安全性。

打破双亲委派的场景:
1. SPI机制(JDBC)使用线程上下文类加载器
2. Tomcat每个Web应用独立的类加载器
3. OSGi模块化热部署

📖 深入阅读:类加载机制详解 · 打破双亲委派模型

JVM调优实战

常见调优参数:

-Xms 初始堆大小,-Xmx 最大堆大小,生产环境通常设为相同值避免动态扩容。

-Xmn 新生代大小,-XX:NewRatio 新老年代比例。

-XX:+UseG1GC 使用G1回收器,-XX:MaxGCPauseMillis 最大停顿时间目标。

调优思路:先分析GC日志定位问题,再针对性调整。常见问题有频繁Full GC、内存泄漏、停顿时间过长。

📖 深入阅读:JVM 调优参数详解 · 逃逸分析

实战场景

场景:IDEA 中分析 GC 日志

# 启动时开启 GC 日志(JDK 8) java -Xms512m -Xmx512m -XX:+PrintGCDetails -XX:+PrintGCDateStamps \ -Xloggc:gc.log -jar app.jar # JDK 11+ 统一日志格式 java -Xms512m -Xmx512m \ -Xlog:gc*=info:file=gc.log:time,level,tags \ -jar app.jar # 常见问题排查 # 1. 频繁 Full GC → 堆太小或内存泄漏,先 dump 分析 # 2. Young GC 时间长 → 新生代太大,减小 -Xmn # 3. 元空间 OOM → 增大 -XX:MaxMetaspaceSize