2012-07-16 59 views
1

在我的Android開發者控制檯,我看到一些崩潰,並內存溢出雖然堆大小小於6MB

Caused by: java.lang.OutOfMemoryError: (Heap Size=5795KB, Allocated=3859KB) 

特別是小堆大小(小於6MB)令我感到奇怪。

我該如何解釋這個堆大小?這是OOM呼叫之前堆的大小嗎?我可以假設最大堆至少16MB?如果是這樣,這是否意味着我試圖分配一個至少10MB(16MB - 6MB)的塊?

+2

提供的代碼,導致OOM – 2012-07-16 12:30:50

+1

我快看看告訴我,你是試圖分配的東西比5795KB更大 - 3859KB和堆大小爲6MB – mathk 2012-07-16 12:31:54

+0

@mathk我一直認爲Android應用程序至少有16MB堆可用。這不正確嗎? – 2012-07-16 12:36:08

回答

0

您可以使用以下方法來檢查存儲器狀態:

ActivityManager actMgr = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); 
ActivityManager.MemoryInfo minfo = new ActivityManager.MemoryInfo(); 
actMgr.getMemoryInfo(minfo); 
if(minfo.lowMemory) { //do something 
} 
+0

感謝您的代碼片段。然而,我主要試圖理解爲什麼我會遇到OOM,因爲使用的堆大約是6MB,應該有(afaik)至少16MB可用。 – 2012-07-16 12:43:27