NativeMemoryTracking
配置方法:启动脚本添加 -XX:NativeMemoryTracking=detail
查看方法:jcmd pid VM.native_memory detail
优缺点:NMT显示的内存包含堆内内存、Code区域、通过unsafe.allocateMemory和DirectByteBuffer申请的内存,但是不包含其他Native Code(C代码)申请的堆外内存。
使用场景:主要用于定位Native Code(C代码)申请的堆外内存泄露,如网络数据传输场景。

jconsole 通过jmxport 查看
配置方法:启动脚本添加 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=911
查看方法:通过jconsole 查看
优缺点:能明显的看到堆内与堆外内存的使用曲线,但是无法准确定位具体泄露位置

MemoryAnalyzer 分析
下载heap 文件:jmap -dump:format=b,file=/my.dump pid
查看方法:使用MemoryAnalyzer 工具打开dump文件查看
优缺点:能看到对象所占内存情况,便于内存分析
