JVM 全套面试题整理(由简到难,2026最新完整版)
很多同学面试 JVM 很痛苦知识点杂乱、背了不会用、面试问深一点就崩。本文按照入门基础 → 内存模型 → GC 垃圾回收 → 类加载机制 → 底层原理 → 线上调优与故障排查难度逐级递增整理可直接背诵、可直接口述、可解决线上问题。适合Java 初级/中级/高级面试突击、简历亮点补充、后端技术复盘。一、入门基础篇初级必问送分题1. 什么是 JVM它的作用是什么**答**JVM 即 Java 虚拟机是一台专门执行 Java 字节码的虚拟机器。核心作用三点✅跨平台一次编译、到处运行.java编译为统一.class字节码由各平台 JVM 执行✅自动内存管理自动分配内存、自动垃圾回收避免 C/C 手动内存出错✅代码安全与隔离字节码校验、沙箱机制保障运行安全。2. JDK、JRE、JVM 三者区别**答**包含关系JDK JRE JVMJVM只负责运行字节码无编译工具JREJVM Java 基础类库只能运行程序不能开发JDKJRE 编译、调试、监控工具完整开发环境。3. Java 程序运行过程答编写.java→javac编译成.class字节码 → JVM 类加载 → 字节码校验 → 解释/编译执行 → 自动内存管理与 GC。4. Java 是跨平台的JVM 是跨平台的吗答Java 跨平台JVM 不跨平台。不同操作系统需要安装对应版本的 JVMJVM 屏蔽系统差异从而实现 Java 字节码跨平台运行。二、JVM 内存结构篇中级高频核心1. JVM 运行时数据区有哪些哪些线程私有、哪些共享答线程私有随线程生灭程序计数器记录当前执行字节码行号唯一无 OOM 区域虚拟机栈存储栈帧、局部变量表、方法调用与返回信息本地方法栈为虚拟机使用到的本地Native方法服务。线程共享全局堆 Heap所有对象、数组存放位置GC 主战场元空间 MetaspaceJDK8存类结构、方法、常量、静态变量。2. 栈和堆的区别答栈线程私有、速度快、空间小、方法结束自动释放、无 GC堆线程共享、空间大、速度慢、需要 GC 回收、容易 OOM。口诀栈存局部变量堆存对象实例。3. JDK8 为什么废除永久代、改用元空间答永久代大小固定容易出现PermGen OOM元空间使用本地直接内存不再占用堆内存动态扩容默认几乎无上限大幅减少类加载 OOM。4. 常见 OOM 内存溢出场景**答**四种最常见堆 OOM对象过多、内存泄漏、大对象堆积元空间 OOM动态生成大量类、CGLIB 代理、频繁热部署栈溢出递归死循环、方法调用层级过深StackOverflowError直接内存 OOMNIO 未释放 ByteBuffer。5. 深拷贝和浅拷贝答浅拷贝shallowCopy只是增加了一个指针指向已存在的内存地址深拷贝deepCopy是增加了一个指针并且申请了一个新的内存使这个增加的指针指向这个新的内存三、GC 垃圾回收篇面试重中之重1. JVM 如何判断对象是否可回收**答**主流采用可达性分析算法。从GC Roots出发遍历对象图不可到达的对象即为垃圾对象。GC Roots 包含栈中引用对象、静态变量、常量、本地方法引用、活跃线程。补充早期引用计数法无法解决循环引用已被 JVM 废弃。2. JVM 四种引用类型及场景**答**强度从高到低强 软 弱 虚强引用默认引用只要存在就不回收普通业务对象比如 Object obj new Object()软引用 SoftReference内存充足不回收内存即将 OOM 才回收适合做缓存弱引用 WeakReference下次 GC 必回收适用于ThreadLocal虚引用 PhantomReference仅用于监控对象回收不能获取对象实例。3. 新生代与老年代特点对象晋升规则答新生代Eden S0 S18:1:1对象新生、存活少、GC 频繁、速度快老年代存活久、体积大、GC 少、耗时高。晋升条件对象新生代存活满15 次 GC晋升老年代大对象直接进入老年代避免新生代复制开销。4. Minor GC、Major GC、Full GC 区别答Minor GC只回收新生代频率高、STW 短影响小Major GC主要回收老年代通常伴随 Minor GCFull GC全堆回收新生代老年代元空间STW 最长、最耗性能线上尽量避免。5. 常见垃圾收集器对比与生产选型答Parallel吞吐量优先JDK8 默认适合后台任务、批量服务CMS低延迟、并发回收适合高并发互联网服务缺点内存碎片、浮动垃圾G1分区收集、可控制停顿时间JDK9 默认均衡吞吐量与延迟ZGC超低延迟、毫秒级停顿适合超大堆、核心高可用服务。四、类加载机制篇中高阶必问1. 类加载的全过程**答**五大阶段加载 → 验证 → 准备 → 解析 → 初始化加载读取 class 文件生成 Class 对象验证校验字节码合法性、安全性准备静态变量分配内存、赋默认值解析符号引用转为直接内存引用初始化执行静态代码块、静态变量赋值。2. 什么是双亲委派模型作用**答**类加载器加载类时先向上委托父加载器父加载器无法加载自己再加载。加载器层级启动类加载器 → 扩展类加载器 → 应用类加载器 → 自定义加载器核心作用保证 JDK 核心类安全防止被自定义类篡改如 String、Object避免类重复加载保证类唯一性。3. 哪些场景会打破双亲委派**答**四大经典场景JDBC、Dubbo 等SPI 服务扩展Tomcat 容器隔离不同项目类、热部署OSGi 模块化动态热更新自定义类加载器实现加密、热加载。五、底层进阶篇高级开发面试点1. 什么是 STW哪些 GC 会产生 STW**答**STWStop-The-World即暂停所有用户线程只保留 GC 线程工作是程序卡顿的根本原因。所有 GC 都会 STW只是时长不同Minor GC短暂 STW几乎无感Full GC长时间 STW直接导致接口超时、服务卡顿。2. 内存泄漏和内存溢出的区别常见泄漏场景答内存泄漏无用对象一直被引用GC 无法回收是持续过程内存溢出 OOM泄漏累积到内存耗尽是最终结果。高频内存泄漏场景静态集合无限堆积数据不清理ThreadLocal 使用后未 remove线程复用导致对象常驻内存IO、数据库、连接池资源未关闭缓存无过期、无淘汰策略匿名内部类、异步线程持有外部对象引用。3. 对象在 JVM 中的创建流程答检测类是否已加载未加载则执行类加载堆内存分配指针碰撞 / 空闲列表初始化对象默认值设置对象头信息执行构造方法初始化返回对象引用。六、线上调优与故障排查大厂压轴题1. 生产常用 JVM 参数答-Xms初始堆内存、-Xmx最大堆内存生产建议相等避免动态扩容-Xmn新生代大小-XX:MetaspaceSize / MaxMetaspaceSize元空间参数-Xss线程栈大小-XX:UseG1GC使用 G1 收集器-XX:PrintGCDetails打印 GC 日志。2. 线上频繁 Full GC 如何排查**答**标准排查流程查看 GC 日志确认是内存泄漏还是内存不足jps查看进程、jstat -gc实时监控 GC 频率与耗时jmap查看堆对象分布dump 堆快照使用 MAT/JProfiler 分析大对象、泄漏对象、重复对象定位代码问题缓存、静态集合、ThreadLocal、资源未释放修复代码 调整 JVM 参数 压测验证。3. 什么时候需要做 JVM 调优**答**出现以下现象必须调优Full GC 频繁、GC 停顿时间过长接口响应抖动、超时、CPU 飙高服务频繁 OOM、重启、内存水位持续居高不下。七、写在最后JVM 面试的核心逻辑非常清晰初级考概念、内存结构、GC 基础中级考引用类型、回收机制、类加载、双亲委派高级考收集器选型、STW、内存泄漏、线上 GC 调优、故障排查。本文从易到难全覆盖不仅适用于面试背诵更能帮你建立完整的 JVM 底层思维。如果对你有帮助点赞、分享、推荐一下呀对主编都是很大的帮助。留一个疑问欢迎评论区讨论User user new User() 做了什么操作申请了哪些内存

相关新闻

生产级机器学习服务架构:特征仓库、模型注册与可观测性实战

生产级机器学习服务架构:特征仓库、模型注册与可观测性实战

1. 项目概述:这不是“部署”,是让模型真正活在业务流水线里“From Notebook to Production: Running ML in the Real World (Part 4)”——光看标题,你可能以为这是系列教程的收尾篇,讲讲怎么把Jupyter里跑通的模型丢进Docker、打…

2026/7/3 4:51:17 阅读更多 →
Python基础数据结构详解

Python基础数据结构详解

Python基础数据结构详解:从字符串到字典的全面指南 Python作为一门简洁高效的编程语言,其内置的数据结构为日常编程提供了强大的支持。本文将深入探讨Python中最常用的几种基础数据结构:字符串(str)、列表(…

2026/7/3 4:49:16 阅读更多 →
销售预测实战:用时间序列分解与SARIMAX提升准确率

销售预测实战:用时间序列分解与SARIMAX提升准确率

1. 项目概述:为什么销售预测不能只靠“拍脑袋”,而必须深挖时间序列的底层逻辑做销售预测这件事,我干了快十二年,从最早拿Excel拉移动平均线,到后来用Python写完整pipeline跑SARIMA,再到如今在生产环境里维…

2026/7/3 4:47:15 阅读更多 →

最新新闻

SkillBridge:如何用Python无缝对接Cadence Virtuoso实现EDA自动化?

SkillBridge:如何用Python无缝对接Cadence Virtuoso实现EDA自动化?

SkillBridge:如何用Python无缝对接Cadence Virtuoso实现EDA自动化? 【免费下载链接】skillbridge A seamless python to Cadence Virtuoso Skill interface 项目地址: https://gitcode.com/gh_mirrors/sk/skillbridge 在电子设计自动化&#xff0…

2026/7/3 5:51:30 阅读更多 →
通透菠萝_Fantasyland是什么意思

通透菠萝_Fantasyland是什么意思

引言:大菠萝里那个让人上头的词——Fantasyland 玩 OFC(Open Face Chinese,中文常叫"大菠萝扑克")稍微久一点,你一定会反复听到一个词:Fantasyland(有人直接叫"梦幻岛")。老玩家一提到它就两眼放光,新手却常常一头雾水:它到底是什么?为什么大家都想进?这…

2026/7/3 5:51:30 阅读更多 →
探索 Nuxt.js 全栈能力:用 Better-Auth 打造类型安全的 RBAC 权限系统

探索 Nuxt.js 全栈能力:用 Better-Auth 打造类型安全的 RBAC 权限系统

☘️ 前言 Hello,感觉已经很久没有认真写文章了。自从 AI 热潮席卷技术圈之后,传统的技术路线文章似乎渐渐失去了原本的参考意义。 这次项目的开发初衷,其实是对 Better Auth 很感兴趣,想借助一个全新项目来系统学习它。在技术选…

2026/7/3 5:49:30 阅读更多 →
DeepSeek V4实战测评:前端工程师视角下的国产大模型工程化能力

DeepSeek V4实战测评:前端工程师视角下的国产大模型工程化能力

1. 项目概述:这不是一次“跑分”,而是一场真实开发场景下的压力测试我做AI模型测评,从来不用标准Benchmark打分表。那玩意儿像体检报告——数值漂亮,但你真感冒发烧时,它救不了命。这次我把DeepSeek V4 Pro、DeepSeek …

2026/7/3 5:47:30 阅读更多 →
JAVA 八股文 第五章(元空间替代永久代)

JAVA 八股文 第五章(元空间替代永久代)

为什么 JVM 用元空间(Metaspace)替代永久代(PermGen)? 在 Java 发展过程中,JDK 8 做了一个非常重要的改动:移除了永久代(PermGen),引入了元空间(M…

2026/7/3 5:45:30 阅读更多 →
中伟视界:复合化工皮带异物检测 AI 系统,YOLOv12-MSA + 无监督异常检测,0.5 秒边缘实时识别落地实践

中伟视界:复合化工皮带异物检测 AI 系统,YOLOv12-MSA + 无监督异常检测,0.5 秒边缘实时识别落地实践

在复合化工企业的生产流程中,皮带输送系统承担原料转运核心任务。原料开采、装卸、堆放、运输全流程极易混入金属碎片、铁丝、木块、塑料、易燃易爆杂物。异物进入产线轻则堵塞溜槽、增加能耗,重则撕裂皮带,引发非计划停机与安全生产事故。传…

2026/7/3 5:41:29 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻