2012-07-16 39 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