定位 JVM 内存泄漏的关键流程如下:
- 观察内存趋势:通过 JVM 监控/告警观察新生代、老年代、Metaspace、DirectBuffer 内存持续增长
- 区分堆内/堆外:
- 堆内泄漏:使用 jmap 或 ARMS 的"内存快照"功能下载堆快照(.hprof)
- 堆外泄漏:借助 NMT(Native Memory Tracking)等工具监测堆外申请
- 分析对象引用:使用 Eclipse MAT 或阿里云 ATP 分析工具查看:
- 堆内占比最高的对象类型
- GC Root 引用链,找到无法回收的根本原因
- 结合内存热点火焰图:通过持续剖析常态化记录方法的内存对象分配占比,定位到具体分配路径
- 代码审查:结合分析结果检查静态集合、缓存、监听器等潜在泄漏点
阿里云 ARMS 提供开箱即用的内存快照白屏化功能,让创建、获取和分析更加简单。




