【JVM调优实战】20-OOM全景图
OOM 全景图:九种 OOM 类型与排查套路本文是《JVM调优实战》专栏第 20 讲。很多开发者的第一反应是:OOM 就是堆内存不够了呗,调大-Xmx就行。这个理解只覆盖了 OOM 的冰山一角。实际上,JVM 中至少有 8 种不同类型的OutOfMemoryError,每种背后的原因、排查方向和解决方案都截然不同。如果只盯着堆空间,你可能调了半天-Xmx仍然频繁崩溃——因为问题根本不在堆上。OOM 是 JVM 在"某类资源耗尽"时抛出的终极信号。这里的"资源"不只是堆内存,还包括元空间、线程栈、直接内存、甚至操作系统层面的进程资源。就像一个城市不只是缺水会瘫痪——缺电、缺燃气、交通堵塞、通信中断,每种灾难的应对方式都不一样。本讲将为你绘制一张 OOM 全景图,逐一拆解每种 OOM 的成因与对策,最后给出一个通用排查套路,让你在面对任何 OOM 时都能有条不紊地定位根因。九种 OOM 类型详解1. Java heap space——堆溢出这是最常见的 OOM。当 JVM 堆中没有足够空间分配新对象,且 GC 无法回收更多内存时触发。典型原因:内存泄漏(对象无法被回收)、堆设置过小、短时间内创建大量对象(如批量查询结果未分页)。排查方向