我如何检测Android应用程序的堆大小使用情况?

6 浏览
0 Comments

我如何检测Android应用程序的堆大小使用情况?

我希望以两种方式了解我的Android应用程序使用的堆空间量: - 通过编程

- 通过DDMS。

在发布这篇文章之前,我已经参考了这篇文章。在那篇文章中,它提到Debug.getNativeHeapSize()返回堆大小。这是我应该使用的确切方法来编程检测堆大小吗?如果是这样的话,我应该在哪里记录它,以便获得正确的应用程序堆大小使用情况?

admin 更改状态以发布 2023年5月22日
0
0 Comments

是的。
请注意,在DDMS中也有堆视图,您可以使用MAT Eclipse,它特别有用,特别是在跟踪内存泄漏方面,但是这是一个巨大的“但是”,您看到的数字仅是由VM管理的引用型内存。 Android中有许多子系统是在VM之下实现的本机代码,最简单的例子就是Bitmap类。您将无法在DDMS中看到为Bitmap分配的整个内存,垃圾收集器也不会非常快或优秀地回收此内存,所以请小心。

0
0 Comments

这是我使用的:

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)");
    }

0