内存泄漏指的是无意中持有无用对象 (unintenional object retention)
症状,进程运行一段时间后,抛出 OutOfmemoryErrors 后终止运行
排查
解决
使用 jcmd <pid> JFR 采样内存分配情况,配合 jcmd <pid> GC.class_stats/GC.class_histogram 查看啥类对象被频繁回收,尝试复用对象,或者使用 TLA 避免堆上分配,减少 gc。
使用 jcmd 或者 jstack 打印线程堆栈信息,它本身会显示 mointer 死锁,JDK API-ThreadMXBean 提供了API findDeadlockedThreads 可以编程式发现死锁。
对于 java.util.concurrent 包的锁,需要查看是不是有大量线程处于等待状态
开启 JFR profile Java 进程运行状态,dump 出 jfr 文件,用 JMC 打开,查看 Method Profiling 中,哪些方法特别热。