Java面试通关⑯:JVM虚拟机核心全集

📖 前言导读

JVM是Java底层核心、中高级面试终极难点、薪资分水岭模块 ,大厂二面三面必深挖内存模型、GC原理、垃圾收集器、类加载、JVM调优、OOM故障排查。多数开发者只会写业务代码,完全不懂JVM底层,无法应答调优与底层原理提问,线上OOM、CPU飙升、GC频繁故障无法排查。本篇全方位拆解JVM内存结构、GC机制、四大垃圾收集器、类加载、调优参数、线上故障排查,吃透Java虚拟机底层,进阶高级开发与架构师


一、JVM整体内存结构

📌 必考指数:★★★★★

JVM运行时数据区分为五大区域,各区域作用、生命周期、异常类型是基础必考点。

  • 程序计数器:线程私有,记录执行行号,无OOM

  • 虚拟机栈:线程私有,存储局部变量、栈帧,栈深度溢出StackOverflowError

  • 本地方法栈:线程私有,服务Native方法,同样栈溢出异常

  • 堆内存:线程共享,所有对象实例、数组存储区域,OOM核心区域

  • 方法区:线程共享,存储类信息、常量、静态变量、编译代码,元空间溢出


二、堆内存分代模型

📌 必考指数:★★★★★

堆内存是GC回收核心区域,分为新生代、老年代,JDK1.8废弃永久代、使用元空间。

1、新生代

Eden区+两个Survivor区(From/To),比例8:1:1,对象新生、短暂存活,频繁Minor GC,回收速度快。

2、老年代

存放长期存活对象、大对象,存活久、GC频率低,触发Major GC/Full GC,耗时极高。

3、对象晋升规则

对象熬过15次Minor GC、大对象、Survivor空间不足,自动晋升老年代。


三、GC垃圾回收算法

📌 必考指数:★★★★★

  • 标记清除:标记垃圾、统一清除,速度快、产生内存碎片

  • 标记整理:标记垃圾、整理存活对象,无碎片、速度慢,适配老年代

  • 复制算法:内存对半复制、无碎片、效率高、浪费空间,适配新生代


四、四大垃圾收集器

📌 必考指数:★★★★★

  • Serial:单线程收集、低性能、适合客户端

  • Parallel:多线程并行、追求吞吐量、服务端默认经典收集器

  • CMS:并发低停顿、追求响应速度、老年代收集器、碎片多

  • G1:分区收集、可预测停顿、兼顾吞吐量与低延迟、JDK9+默认主流

生产最优选型:高并发低延迟用G1,高吞吐批量任务用Parallel。


五、类加载与双亲委派

📌 必考指数:★★★★

类加载全过程:加载→验证→准备→解析→初始化。双亲委派机制:子类加载器优先委派父类加载,保证JDK核心类安全、避免重复加载、防止篡改核心类。


六、常见OOM异常与排查

📌 必考指数:★★★★

常见OOM场景:堆内存溢出、元空间溢出、栈溢出、直接内存溢出。排查思路:导出堆快照、MAT分析大对象、内存泄漏点、定位代码问题、优化内存占用、调整JVM参数。


七、本篇高频面试真题(必背)

1、JVM内存区域划分与作用?

分为程序计数器、虚拟机栈、本地方法栈、堆、方法区。线程私有区域保证线程独立运行,堆与方法区线程共享,存储对象与类信息,各区域职责明确,异常类型不同,是Java内存运行的基础架构。

2、Minor GC、Major GC、Full GC区别?

Minor GC:新生代垃圾回收、频繁、速度快、停顿短;Major GC:老年代回收、次数少、耗时久;Full GC:全堆+方法区整体回收、卡顿严重、线上尽量避免,频繁Full GC会导致CPU飙升、服务卡顿。

3、CMS和G1收集器的区别与选型?

CMS专注低延迟、内存碎片多、无法压缩;G1分区收集、可预测停顿、自动整理碎片、适配大内存、低延迟高并发场景。JDK8及以上生产优先G1,替代老旧CMS,兼顾性能与稳定性。

4、线上OOM如何排查解决?

1、开启OOM快照dump;2、MAT分析堆文件,定位大对象、内存泄漏;3、排查静态集合、循环引用、未释放资源、线程泄漏;4、优化代码释放无用对象;5、合理调整堆内存参数;6、监控GC日志,持续观察GC频率与耗时。


📝 本篇章节小结

本篇全覆盖JVM内存结构、分代模型、GC算法、垃圾收集器、类加载机制、双亲委派、OOM排查、JVM调优基础 核心考点。重点掌握GC机制、收集器选型、内存溢出排查、分代回收原理,彻底吃透JVM底层,具备线上JVM故障排查、性能调优能力,突破高级开发技术瓶颈。

️ 中间件调优:从"八股文"到"生产环境"

掌握了 Redis 缓存穿透 / MySQL 索引优化 的面试话术,只是第一步。在真实的高并发生产环境中,这些参数该如何配置?底层引擎是如何工作的?

相关推荐
标致的自行车6 小时前
Entity Framework之问题收集
jvm·数据库·oracle
ALex_zry9 小时前
C++26 Freestanding 库扩展详解:无操作系统也能用标准库
java·jvm·c++
折哥的程序人生 · 物流技术专研10 小时前
Java面试通关⑭:分布式理论与架构全集
分布式·微服务·校招·分布式事务·cap·java面试·最终一致性
killerbasd21 小时前
总结 7.04
jvm
折哥的程序人生 · 物流技术专研1 天前
Java面试通关⑤:Java异常体系核心全集
校招·java面试·异常体系·社招·代码健壮性·面试避坑
summer_west_fish1 天前
K8s下Java服务OOM排查指南
jvm
折哥的程序人生 · 物流技术专研1 天前
Java面试通关⑦:JavaWeb网络核心全集
网络协议·http·javaweb·校招·前后端交互·java面试·社招
花生了什么事o1 天前
Java 线程池:从参数到拒绝策略
java·jvm
Esaka_Forever1 天前
Python 与 JS (V8) 垃圾回收核心区别 + 底层根源分析
开发语言·javascript·jvm