通过Memory Analyzer分析内存泄漏的解决过程

首先你得有一个dump文件

dump文件获取方式

  1. vm参数配置

-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCDateStamps
-XX:+PrintGCDetails
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=c:/heap.bin

  1. jmap指令
    jmap -dump:
    比如 jmap -F -dump:live,file=jmap.hprof [PID] 导出内存dump文件

通过Memory Analyzer分析

在overview下整个内存的使用情况:


image.png

在dominator_tree视图下,该视图列举了所有的大内存对象

image.png

右击查看代码调用该对象的类

image.png

在我的代码里面是这样的情况:

image.png

这个map对象占用大量的内存了,到这里问题原因已经找到,接下来结合代码逻辑修改就可以了,很简单的哦!

大家也可以通过ema自动生成Leak Supects Report 视图中查看可能造成OOM的对象分析


image.png

image.png

我这里是有10个大对象


image.png

根据这里给出的地址号去dominator_tree查找对应的被对象,比如这里的
0x6c640b690


image.png

好了,分享结束!!!

你可能感兴趣的:(通过Memory Analyzer分析内存泄漏的解决过程)