我通过插入语句Debug.dumpHprofData(“ / sdcard / myapp.hprof”)创建了一个hprof文件;在我的应用程序代码中;然后,我已经通过hprof-conv运行了hprof文件,并在Eclipse中打开了转换后的文件.
遵循MAT“备忘单”的建议,我通过进入“泄漏识别->组件报告”输入“ com.prepbgg.*”并单击“完成”,对应用程序的内存使用情况进行了分析.
我知道我的应用程序正在消耗大量内存:特别是在我称之为dumpHprofData的阶段,它有一个1百万像素的位图对象和一个必须占用数百KB的画布. (我还怀疑它正在泄漏大量的内存,因为在屏幕旋转了几次后性能会严重下降.)
但是,com.prepbgg.*的组件报告显示总内存仅为38.7KB.直方图视图显示android.graphics.Bitmap(大概是包括我的所有应用程序的总和)404对象和Shallow Heap 12,928.那是12928字节吗?
显然,我的应用程序占用38.7KB以上的空间,而位图则远远超过12928字节.我要去哪里错了?如何查看我的应用消耗的总内存?
解决方法:
位图的大部分空间将在本机堆上.请参见位图的来源:它有七个字段.假设每个字段是四个字节(对于引用和整数几乎是确定的,对于布尔值是合理的),为对象标头添加额外的四个字节,并且:
(7*4 + 4) * 404 = 12928
我不认为没有运行您自己的构建的任何简单方法即可检查本机堆.
您可以询问分配了多少东西:http://developer.android.com/reference/android/os/Debug.html#getNativeHeapAllocatedSize()