我想通過兩種方式知道我的Android應用程序使用的堆空間量: - 以編程方式012xx- 通過DDMS。如何檢測Android應用程序的堆大小使用情況
我已經提到this的帖子,之前張貼在這裏。在那篇文章中提到,Debug.getNativeHeapSize()
返回heapsize。這是我應該使用的確切方法,以編程方式檢測堆大小?如果是這樣,我應該在哪裏登錄才能獲得我的應用程序的正確heapsize使用情況?
我想通過兩種方式知道我的Android應用程序使用的堆空間量: - 以編程方式012xx- 通過DDMS。如何檢測Android應用程序的堆大小使用情況
我已經提到this的帖子,之前張貼在這裏。在那篇文章中提到,Debug.getNativeHeapSize()
返回heapsize。這是我應該使用的確切方法,以編程方式檢測堆大小?如果是這樣,我應該在哪裏登錄才能獲得我的應用程序的正確heapsize使用情況?
這裏是我使用:
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)");
}
這很酷。 – 2012-04-06 23:58:53
是的。 請注意,在DDMS中也有堆視圖,您可以使用MAT Eclipse,這對於跟蹤BUT的內存泄漏尤其有用,這是一個巨大的數字,但您看到的數字僅供參考由VM管理的內存。 Android中有很多子系統在VM - native下執行。最簡單的示例位圖類。你不會在DDMS中看到分配給位圖的整個內存,並且垃圾收集器在恢復這個內存時不是很好/很快。所以要小心。
在這篇文章中http://stackoverflow.com/questions/2298208/how-to-discover-memory-usage-of-my-application-in-android戴安提供了大量可能有用的信息。 – 2011-01-27 19:52:27