JVM 面试题:内存、GC 与故障排查
用运行时模型理解现象,用证据定位内存和停顿问题。
适用范围
运行时概念参考 Java SE 21 JVM 规范;具体收集器与参数以运行环境为准。
JVM 复习可以从运行时数据区域开始,逐步连接对象生命周期和故障证据。规范描述与某个虚拟机实现的参数并不相同;讲解时应注明 JDK 版本、虚拟机实现和收集器配置。
学习顺序
- 运行时区域。 画出线程共享与线程私有的区域,说明方法调用与对象分配分别涉及什么。
- 对象可达性。 用引用关系图说明对象是否仍可能被使用,再讨论回收。
- 分配与回收。 针对一个实际 JDK 和收集器观察分配、晋升、停顿日志,避免把某一收集器的规则推广到所有实现。
- 故障排查。 区分堆内存、线程、直接内存等资源问题;先保存现场,再验证假设。
排查演练
在隔离的测试程序中持续保留对象引用,观察内存增长。记录启动参数、负载、GC 日志与错误类型;修复引用保留后重复实验,对比结果。不要在生产环境随意触发内存溢出或抓取含敏感数据的转储。
如何回答调优题
先说明业务指标与问题证据,再提出可回滚的单个改动,最后给出观察窗口与成功标准。没有延迟、吞吐和资源基线时,“把堆调大”不能构成完整的优化结论。
能够区分泄漏、容量不足、分配过快和其他资源耗尽,比背诵参数列表更有用。
补充:虚拟内存基础
理解 JVM 内存区域后,可继续复习操作系统的虚拟地址和分页。它们属于不同层次:JVM 的堆布局不等同于操作系统的页管理。
参考资料
相关学习路线
安排复习节奏
Java 虚拟机题库
共 45 道题按题库默认顺序排列,可选择分类集中练习。
显示 45 道题
- JVM 有什么作用 基础与综合
- 介绍 JVM 运行时数据区域 内存与对象
- 哪些内存区域可能发生 OOM?每个区域发生 OOM 的原因有哪些 内存与对象
- 常见的 OOM 场景有哪些?有什么解决方案 调优与故障排查
- 内存泄漏跟内存溢出有什么区别?常见的内存泄漏场景?如何解决内存泄漏? 调优与故障排查
- 所有的对象都一定会分配在堆中吗?还可以分配到哪里 内存与对象
- new 一个对象在堆中的历程(对象的创建过程) 内存与对象
- 如何在堆中找到某个对象的具体位置(对象的访问定位) 内存与对象
- 什么是堆外内存?堆外内存的使用场景? 内存与对象
- JVM 压缩指针了解过么?具体怎么实现的? 内存与对象
- 方法区会发生垃圾回收吗 垃圾回收
- 如何判断对象为垃圾(如何判断对象是否可回收)、哪些对象的引用可以作为 GC Roots 垃圾回收
- 为什么类的成员变量不可以作为 GC Root 垃圾回收
- 什么是安全点和安全区域 垃圾回收
- 知道三色标记法吗(浮动垃圾和对象消失问题) 垃圾回收
- 对象可回收,就一定会被回收吗?(finalize) 垃圾回收
- finalize 中抛出异常会导致程序崩溃吗 垃圾回收
- Java 中有几种类型的引用,其区别和具体作用是什么 垃圾回收
- 分代收集理论是什么?为什么要分代 垃圾回收
- 有哪些垃圾收集算法 垃圾回收
- HotSpot 虚拟机新生代为什么用 Mark Copy 算法 垃圾回收
- 为什么需要 Survivor 区?为什么设置两个 Survivor 区?为什么不设置更多的 Survivor 区 垃圾回收
- 内存分配与垃圾回收原则(介绍下 JVM 的 GC 机制) 垃圾回收
- System.gc() 能保证 GC 一定发生吗 垃圾回收
- Full GC 的触发条件 垃圾回收
- 既然堆有垃圾收集为什么还会 OOM? 垃圾回收
- 为什么垃圾回收次数过多会不好 垃圾回收
- 你知道哪些垃圾回收器 垃圾回收
- class 文件(字节码)存储的内容是什么 类加载与字节码
- 介绍类加载过程 类加载与字节码
- 类加载过程是不是线程安全的 类加载与字节码
- 什么情况下会触发类加载 类加载与字节码
- 有几种类加载器?双亲委派和打破双亲委派 类加载与字节码
- 怎么实现自定义类加载器 类加载与字节码
- 类加载器什么情况下会被回收 类加载与字节码
- 你知道哪些 JVM 的参数 调优与故障排查
- JVM 要启动一个 Java 程序,会涉及到什么参数? 调优与故障排查
- 你知道哪些 JVM 分析的工具 调优与故障排查
- JVM 调优手段有哪些?你做过 JVM 调优吗 调优与故障排查
- 发生 OOM 了如何排查? 调优与故障排查
- 内存什么时候会出现锯齿状的波动,为什么会出现这种情况,举个例子?内存波形图是很小的锯齿形和很大的锯齿形比起来哪种好,为什么?波动很大怎么解决? 调优与故障排查
- 如果线上服务频繁触发 FullGC,该如何处理 调优与故障排查
- 在一个 for 循环中每次都需要 new 一个很大的对象,这一个对象就快把内存占满了,如果不想每次循环都发生 GC 该怎么办? 调优与故障排查
- 线上 CPU 100% 怎么排查 调优与故障排查
- 磁盘异常爆满如何排查 调优与故障排查

评论 0 友善交流,让每个问题都有回响
还没有评论,分享你的看法吧。