高效复习Java内存泄漏排查需建立“现象→工具→根因→修复”闭环,聚焦4个判断指标、2条JDK自带排查路径、5类高频泄漏代码模式及3个复习误区。

高效复习 Java 内存泄漏排查,关键不是背概念,而是建立「现象→工具→根因→修复」的闭环思维。重点抓准三类核心知识:判断依据、分析路径、高频陷阱,避免陷入工具操作细节或 JVM 理论堆砌。
一、先盯死“是不是泄漏”的4个硬指标
不看日志、不跑工具前,用这4点快速定性(满足2条即可高度怀疑):
- 老年代内存使用率持续>90%,且每次 Full GC 后回落<10%
- Full GC 频率从几小时一次变成几分钟一次,单次耗时超1秒
- 服务越运行越慢,GC 停顿时间与接口超时率明显正相关
- 重启后问题短暂消失,数小时/数天内复现相同 OOM 报错
二、掌握两条低成本排查主线
不用装新工具,JDK 自带命令就能走通大部分场景:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
-
主线1(轻量监控):用
jstat -gc PID 2s每2秒看一次 GC 趋势,重点关注OU(老年代使用量)是否单向爬升、FGCT(Full GC 总耗时)是否加速增长 -
主线2(精准定位):发现异常后,立刻执行
jmap -dump:live,format=b,file=heap.hprof PID生成堆快照,再用 VisualVM 或 MAT 打开,按“支配树(Dominator Tree)”排序,找 top 3 占用对象及其引用链
三、死记5类高频泄漏代码模式
这些不是理论,是生产环境80%以上泄漏的直接源头,看到就该条件反射:
立即学习“Java免费学习笔记(深入)”;
-
静态容器无清理:如
private static Map<String, Object> cache = new HashMap<>();—— 必须配定时清理或改用WeakHashMap -
ThreadLocal 未 remove:线程池中使用后不调
tl.remove(),导致线程复用时对象长期滞留 - 监听器/回调未注销:Spring EventListener、GUI 事件、Netty ChannelHandler 注册后没对应 remove/unregister
- 内部类持外部引用:匿名类、Lambda、非静态内部类隐式持有外部类实例,尤其在异步任务中
- 资源未关闭:流、连接、Channel 等未用 try-with-resources,或 finally 块里忘记 close
四、跳过3个常见复习误区
节省时间,直击要害:
- 不必深究 G1/CMS 算法细节——知道“老年代涨得快”比懂混合回收更实用
- 不必手写 GC 日志解析脚本——用 GCViewer 或在线工具(如 gceasy.io)上传日志自动出报告
- 不必反复练习 jmap/jstat 语法——记牢两个命令:jstat 看趋势、jmap 做快照,其余查手册

















