选择[Open Dominator Tree for entire heap]
图3
选择[Group result by...],下拉列表中勾选[Group result by class loader],如图4:
图4
我们主要看Objects这一列。如图5:
图5
因为hprof保存的是内存快照,我们可以在程序启动前获得一个hprof文件,在做完50次的测试后再获得一个文件,两者对比,如果出现object的数量与次数一起递增,那么相对应的class就是泄漏的对象了,参照代码,很容易我们就能找到泄漏的地方。但是如果无论执行多少遍,objects的数量都没有变化,这样就不得不考虑是不是native的问题了。
这种情况得特别对待,最直白的定位方法就是试,把认为内存泄漏的地方给注释掉,重新打包再测。其实如果有相当大把握的怀疑,这种方法是最有效的。但是很多次后还没有确定泄漏的范围就尝试其他方法吧。
O P hone SDK 提供了一些获得内存信息的api,使用如下:
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
MemoryInfo info = new MemoryInfo();
activityManager.getMemoryInfo(info);
Log.i("memory free:", "" + info.availMem);