什么是内存泄漏
申请了一块内存空间,但是一直没有释放。如果不断的申请还会引起内存溢出(OOM)
什么是内存抖动
频繁的GC操作,如果垃圾回收的速度没有生成的快,也会引起OOM
如何检测?
我使用的是Profiler+Mat,前提是必须要ADB调试

MAT工具下载地址 (https://www.eclipse.org/mat/)
运行完Profiler会出现

点击MEMORY部分

点击下载 开始记录

生成

右键Heap Dump导出文件


然后将该文件通过sdk里的hprof-conv.exe转一下文件

注意:adb调试是在你的hprof-conv的目录下 将你生成的hprof文件转一下文件 目录就是生成temp.hprof文件以及生成mat需要的文件目录(任意目录)
输入下面的命令:
hprof-conv D:\MemoryAnalyse\memory-20210219T000227.hprof D:\MemoryAnalyse\memory.hprof

打开Mat 点击MemoryAnalyzer.exe

点击File ,之后点击Open Heap Dump... 选择生成的mat可以打开的memory.hprof文件,点击finish

在该位置输入(Fragment|Activity 来排查你的Fragment|Activity的泄漏位置)

右键选择一个点击

这个表示GC Roots 所持有的所有的引用
也可以点击Merge Shortest Paths to GC Roots 点击 exclude all phantom/weak/soft etc.references 这个意思是排除软弱引用
查看强引用
之后就可以查看当前的页面持有什么强引用了

如何处理内存泄漏
一个图片就明白了

把当前持有GC root 与下一个持有的断开GC就可以释放当前内存
1597

被折叠的 条评论
为什么被折叠?



