如何检测 android 应用程序的堆大小使用情况
Posted
技术标签:
【中文标题】如何检测 android 应用程序的堆大小使用情况【英文标题】:How do I detect the heap size usage of an android application 【发布时间】:2011-06-16 18:16:48 【问题描述】:我想通过两种方式了解我的 android 应用程序使用的堆空间量: - 以编程方式 - 通过 DDMS。
在发帖之前,我已经参考了this 的帖子。在那篇文章中,提到Debug.getNativeHeapSize()
返回堆大小。这是我应该使用的确切方法,以便以编程方式检测堆大小吗?如果是这样,我应该在哪里记录它才能正确使用我的应用程序的堆大小?
【问题讨论】:
在这篇文章中***.com/questions/2298208/…Dianne 提供了大量可能有帮助的信息。 【参考方案1】:这是我使用的:
public static void logHeap()
Double allocated = new Double(Debug.getNativeHeapAllocatedSize())/new Double((1048576));
Double available = new Double(Debug.getNativeHeapSize())/1048576.0;
Double free = new Double(Debug.getNativeHeapFreeSize())/1048576.0;
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
df.setMinimumFractionDigits(2);
Log.d("tag", "debug. =================================");
Log.d("tag", "debug.heap native: allocated " + df.format(allocated) + "MB of " + df.format(available) + "MB (" + df.format(free) + "MB free)");
Log.d("tag", "debug.memory: allocated: " + df.format(new Double(Runtime.getRuntime().totalMemory()/1048576)) + "MB of " + df.format(new Double(Runtime.getRuntime().maxMemory()/1048576))+ "MB (" + df.format(new Double(Runtime.getRuntime().freeMemory()/1048576)) +"MB free)");
【讨论】:
【参考方案2】:是的。 请注意,DDMS 中也有堆视图,您可以使用 MAT Eclipse,这非常有用,尤其是在内存泄漏跟踪中,但这是一个巨大的数字,但您看到的数字仅是由 VM 管理的参考内存。 android中有很多子系统在VM-native下实现。最简单的示例 Bitmap 类。您不会在 DDMS 中看到分配给位图的整个内存,并且垃圾收集器在恢复此内存方面不是很好/很快。所以要小心。
【讨论】:
以上是关于如何检测 android 应用程序的堆大小使用情况的主要内容,如果未能解决你的问题,请参考以下文章