相信很多人有过这种情况,想优化项目,却无从下手,而内存泄漏就是一个很大的模块,那么如何在现有的项目中查找内存泄漏呢?
1.确定是否存在内存泄漏
使用MAT内存分析工具
我们可以反复执行某一个操作并同时执行GC排除可以回收掉的内存,观察data object(Heap视图中的一个数据对象)的Total Size值,正常情况下Total Size值会稳定在一个i额有限的范围内,也就是说代码良好,没有泄漏情况,反之,如果随着操作次数的增多Total Size的值越来越大,可以初步判断这个操作导致了内存泄漏
2.找怀疑对象
MAT对比操作前后的hprof来定位内存泄漏的是什么数据对象
3.MAT分析hprof来定位内存泄漏的原因所在
过滤出怀疑对象,然后分析持有此类对象的外部对象,然后再过滤掉一些弱引用、软引用、虚引用,因为他们可以被GC回收,不属于内存泄漏。
逐个分析每个对象的GC路径是否正常,此时就是要进入代码分析此时这个对象的引用持有是否合理。
性能优化的帮助工具:
1.MAT
2.Mamory Monitor
3.Heap Tool
4.Allaction Tracking
5.LeakCanary
6.Lint工具
PS:个人觉得LeakCanary最方便,可以直接在手机端查看内存泄漏。