在我的 android 应用程序中,我分配了一个大的 int 数组。当我认为应该有足够的内存时,这有时会给我一个 OutOfMemory 错误。这是我得到的一个例子:
// always this value
ActivityManager.some_instance.getMemoryClass() = 128 Mb
// always this value
Runtime.getRuntime().maxMemory()/(1024*1024) = 128 Mb
// example value
Runtime.getRuntime().freeMemory()/(1024*1024) = 81 Mb
// example value, can also be bigger than freeMemory()
arrayLengthToAllocate*4/(1024*1024) = 47 Mb
需要明确的是,对于最后一个值大于或小于 freeMemory() 的情况,我会收到 OutOfMemory 错误。
为什么我会收到错误消息?执行分配时堆大小没有增加吗?在尝试分配之前应用程序的内存使用量约为 8 Mb,因此这不是问题。
PS。除了使用该应用程序正在执行的操作的 int[] 之外的其他方法是不可能的。