大阵列 - 内存不足错误

时间:2013-01-18 18:29:31

标签: java android arrays out-of-memory ram

我正在为单个特定手机编写一个Android应用程序(只需要在我的个人手机上运行),我需要使用以下大型数组,我想用它来有效地将RGB颜色转换为HSV:

RainbowTable = new float[256*256*266][3];

此阵列的总大小应为256 * 256 * 256 * 3 * 4B = 201326592B = 192MB。 根据Android任务管理器的说法,当我调试应用程序时,我得到一个out of memory exception,虽然大约300MB的RAM在执行之前仍然是免费的。

我已在清单文件中将large-heap - 选项设置为true

如何防止此错误并保留所需的RAM量?

编辑:我的手机已植根,所以也许有可能增加每个应用程序的内存堆大小。

5 个答案:

答案 0 :(得分:2)

每个设备都有最大的每个应用内存上限。如果清单中的此调用无法缓解您的问题:

android:largeHeap="true"

然后您唯一的另一个选择是使用NDK编写代码。但这是一个非常重要的事情,所以我会先尝试找出另一种选择。

答案 1 :(得分:2)

最大堆大小取决于设备,192MB可能超过设备允许的限制。

但是,this answer表示您可以使用NDK分配更多内存。

答案 2 :(得分:1)

如果你已经尝试过这个 largeHeap = true ,我怀疑是否有一个可行的解决方案,通常单个内存堆的大小最大可以是24 - 48 mb,具体取决于设备

答案 3 :(得分:0)

您可以使用ByteBuffer

ByteBuffer byteBuffer = ByteBuffer.allocate( bigSize);

答案 4 :(得分:-2)

是的,当app使用大内存时,会出现内存问题。 请致电System.gc();这将明确清除垃圾收集器。 android中的每个应用程序都使用有限的内存大约16mb。 试试这个。