MAT分析内存问题简要
引用博文
1)http://blog.****.net/AlbertFly/article/details/51984882
2)http://blog.****.net/zgmzyr/article/details/8232323
目录
1)MAT的安装和文件导入
2)MAT基本分析-查看潜在的内存泄漏
3)MAT基本分析-结合代码查看应该回收的对象
4)MAT基本分析-多文件对比
5)备注:需要了解的一些概念
正文
1)MAT的安装和文件导入
DDMS导出的文件要经过转换才能被 MAT识别,Android SDK提供了这个工具 hprof-conv (位于sdk/tools下)
使用示例“hprof-conv 源文件.hprof 转换后文件.hprof“
MAT可以使用转换后的文件
2)MAT基本分析-查看潜在的内存泄漏
2.1)导入文件后,如下图所示,可以查看当前内存情况,菜单栏提供了对应的工具,可以查看对应的信息
点击“Leak Suspects”,查看MAT对当前文件的潜在内存泄漏信息,列出内存占用量大,重复对象多的可疑问题
点击详情,结合代码查看该信息是否有用
3)MAT基本分析-结合代码查看应该回收的对象
3.1)点击进入查看对象列表,结合代码查看当前应该回收的对象当前是否存在,使用“Group by package”进行分类,方便从自身代码角度查看问题
问题一般出在占用较多的地方
4)MAT基本分析-多文件对比
5)备注:需要了解的一些概念
5.1)引用
- Strong reference : 就是我们new出来的对象,但是还是被持有的应用,垃圾回收时不会回收这个应用
- soft reference : 我们new出来的对象,但是已经不被具体对象持有,常见的就是缓存中的对象引用,垃圾回收在内存还够的时候不会回收该部分内存信息,只有在内存不够时才会回收这块引用的对象
- weak reference : 当对象不在有强引用时候,垃圾回收时立刻回收。
- Phantom reference : 不会在内存中出现,因为它一般是同ReferenceQueue一起出现,来跟踪对象是否还是保持强引用。
5.2)术语
shallow size:对象自身中有的内存大小
retained size:对象自身大小 + 该对象直接或是间接引用对象的shallow size
GC Roots:所有的对象引用refer chains的起点。
以上左图中以object1来说,单独一个object1大小就是shallow size,object1及所有蓝色对象就是该对象直接或是间接引用的就是retained size。
5.3)查看对象
list objects -- with outgoing references : 查看这个对象持有的外部对象引用。
list objects -- with incoming references : 查看这个对象被哪些外部对象引用。
show objects by class -- with outgoing references :查看这个对象类型持有的外部对象引用
show objects by class -- with incoming references :查看这个对象类型被哪些外部对象引用