内存泄漏定位实战本文是《JVM调优实战》专栏第 21 讲。提到"内存泄漏",C/C++ 程序员会想到malloc后忘了free——内存确实丢失了,物理上再也找不回来。Java 程序员则不同:有 GC 自动回收,内存怎么会"泄漏"?答案是:Java 的内存泄漏不是内存丢失,而是对象"活着但不该活着"——它们已经没用了,但因为仍被某些引用链持有,GC 无法回收。就像一个员工已经离职了,但公司系统里他的账号还挂在某个老项目组下,HR 永远不会把他从花名册上删掉。这种泄漏更隐蔽:不会立刻崩溃,而是像温水煮青蛙——内存缓慢增长,直到某天 OOM 暴发,排查时才发现泄漏已经持续了数周甚至数月。本讲将系统梳理 Java 内存泄漏的六大常见场景,并给出从 Heap Dump 到 MAT 分析的完整定位方法论,最后通过一个 ThreadLocal 泄漏实战案例,带你走一遍从复现到定位到修复的全流程。Java 内存泄漏的定义Java 内存泄漏:对象已经不再被程序使用,但仍被 GC Root 可达的引用链持有,导致 GC 无法回收它们。与 C/C++ 的区别:特性C/C++ 内存泄漏Java 内存泄漏本质