知识点专题话题 #6

JVM 面试题:内存、GC 与故障排查

面试之星官方的头像 面试之星官方 更新于

用运行时模型理解现象,用证据定位内存和停顿问题。

适用范围

运行时概念参考 Java SE 21 JVM 规范;具体收集器与参数以运行环境为准。

JVM 复习可以从运行时数据区域开始,逐步连接对象生命周期和故障证据。规范描述与某个虚拟机实现的参数并不相同;讲解时应注明 JDK 版本、虚拟机实现和收集器配置。

学习顺序

  1. 运行时区域。 画出线程共享与线程私有的区域,说明方法调用与对象分配分别涉及什么。
  2. 对象可达性。 用引用关系图说明对象是否仍可能被使用,再讨论回收。
  3. 分配与回收。 针对一个实际 JDK 和收集器观察分配、晋升、停顿日志,避免把某一收集器的规则推广到所有实现。
  4. 故障排查。 区分堆内存、线程、直接内存等资源问题;先保存现场,再验证假设。

排查演练

在隔离的测试程序中持续保留对象引用,观察内存增长。记录启动参数、负载、GC 日志与错误类型;修复引用保留后重复实验,对比结果。不要在生产环境随意触发内存溢出或抓取含敏感数据的转储。

如何回答调优题

先说明业务指标与问题证据,再提出可回滚的单个改动,最后给出观察窗口与成功标准。没有延迟、吞吐和资源基线时,“把堆调大”不能构成完整的优化结论。

能够区分泄漏、容量不足、分配过快和其他资源耗尽,比背诵参数列表更有用。

补充:虚拟内存基础

理解 JVM 内存区域后,可继续复习操作系统的虚拟地址和分页。它们属于不同层次:JVM 的堆布局不等同于操作系统的页管理。

参考资料

相关学习路线

安排复习节奏

30 天 Java 面试计划

Java 虚拟机题库

共 45 道题

按题库默认顺序排列,可选择分类集中练习。

显示 45 道题

  1. JVM 有什么作用 基础与综合
  2. 介绍 JVM 运行时数据区域 内存与对象
  3. 哪些内存区域可能发生 OOM?每个区域发生 OOM 的原因有哪些 内存与对象
  4. 常见的 OOM 场景有哪些?有什么解决方案 调优与故障排查
  5. 内存泄漏跟内存溢出有什么区别?常见的内存泄漏场景?如何解决内存泄漏? 调优与故障排查
  6. 所有的对象都一定会分配在堆中吗?还可以分配到哪里 内存与对象
  7. new 一个对象在堆中的历程(对象的创建过程) 内存与对象
  8. 如何在堆中找到某个对象的具体位置(对象的访问定位) 内存与对象
  9. 什么是堆外内存?堆外内存的使用场景? 内存与对象
  10. JVM 压缩指针了解过么?具体怎么实现的? 内存与对象
  11. 方法区会发生垃圾回收吗 垃圾回收
  12. 如何判断对象为垃圾(如何判断对象是否可回收)、哪些对象的引用可以作为 GC Roots 垃圾回收
  13. 为什么类的成员变量不可以作为 GC Root 垃圾回收
  14. 什么是安全点和安全区域 垃圾回收
  15. 知道三色标记法吗(浮动垃圾和对象消失问题) 垃圾回收
  16. 对象可回收,就一定会被回收吗?(finalize) 垃圾回收
  17. finalize 中抛出异常会导致程序崩溃吗 垃圾回收
  18. Java 中有几种类型的引用,其区别和具体作用是什么 垃圾回收
  19. 分代收集理论是什么?为什么要分代 垃圾回收
  20. 有哪些垃圾收集算法 垃圾回收
  21. HotSpot 虚拟机新生代为什么用 Mark Copy 算法 垃圾回收
  22. 为什么需要 Survivor 区?为什么设置两个 Survivor 区?为什么不设置更多的 Survivor 区 垃圾回收
  23. 内存分配与垃圾回收原则(介绍下 JVM 的 GC 机制) 垃圾回收
  24. System.gc() 能保证 GC 一定发生吗 垃圾回收
  25. Full GC 的触发条件 垃圾回收
  26. 既然堆有垃圾收集为什么还会 OOM? 垃圾回收
  27. 为什么垃圾回收次数过多会不好 垃圾回收
  28. 你知道哪些垃圾回收器 垃圾回收
  29. class 文件(字节码)存储的内容是什么 类加载与字节码
  30. 介绍类加载过程 类加载与字节码
  31. 类加载过程是不是线程安全的 类加载与字节码
  32. 什么情况下会触发类加载 类加载与字节码
  33. 有几种类加载器?双亲委派和打破双亲委派 类加载与字节码
  34. 怎么实现自定义类加载器 类加载与字节码
  35. 类加载器什么情况下会被回收 类加载与字节码
  36. 你知道哪些 JVM 的参数 调优与故障排查
  37. JVM 要启动一个 Java 程序,会涉及到什么参数? 调优与故障排查
  38. 你知道哪些 JVM 分析的工具 调优与故障排查
  39. JVM 调优手段有哪些?你做过 JVM 调优吗 调优与故障排查
  40. 发生 OOM 了如何排查? 调优与故障排查
  41. 内存什么时候会出现锯齿状的波动,为什么会出现这种情况,举个例子?内存波形图是很小的锯齿形和很大的锯齿形比起来哪种好,为什么?波动很大怎么解决? 调优与故障排查
  42. 如果线上服务频繁触发 FullGC,该如何处理 调优与故障排查
  43. 在一个 for 循环中每次都需要 new 一个很大的对象,这一个对象就快把内存占满了,如果不想每次循环都发生 GC 该怎么办? 调优与故障排查
  44. 线上 CPU 100% 怎么排查 调优与故障排查
  45. 磁盘异常爆满如何排查 调优与故障排查

评论 0 友善交流,让每个问题都有回响

还没有评论,分享你的看法吧。