我正在为单个特定手机编写一个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量?
编辑:我的手机已植根,所以也许有可能增加每个应用程序的内存堆大小。答案 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。 试试这个。