JVM内存模型
题目
说说 JVM 的内存模型。
参考答案
如果这里说的是 JVM 运行时内存区域,通常包括:
- 堆
- 虚拟机栈
- 本地方法栈
- 程序计数器
- 方法区 / 元空间
如果面试官追问 Java 内存模型 JMM,就要切换到“主内存、工作内存、可见性、有序性、原子性”那一层,不要把两者混在一起。
回答展开
- 这题最重要的是先和面试官确认,你说的是 JVM 运行时内存区域,还是 Java 内存模型 JMM,这两个名字很像,但考点完全不同。
- 如果是运行时内存区域,回答时可以按线程私有和线程共享来拆:程序计数器、虚拟机栈、本地方法栈是线程私有;堆和方法区/元空间是线程共享。
- 真正线上排查问题时,这个知识点会直接影响定位方向。比如堆内存打满、元空间打满、栈溢出、直接内存泄漏,处理手段都不一样。
实际场景
比如某个服务频繁报 OOM,先要判断是堆内存问题、元空间问题还是栈溢出。只有把 JVM 内存区域分清楚,后面看 dump、看 GC 日志、调参数才不会跑偏。