3

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

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

这个数组的总大小应该是 256*256*256*3*4B = 201326592B = 192MB。out of memory exception根据 Android 任务管理器的说法,当我调试该应用程序时,我得到了一个.,尽管在它执行之前仍有大约 300MB 的 RAM 是空闲的。

我已经在清单文件中将large-heap-option设置为。true

我可以做些什么来防止此错误并保留所需的 RAM 量?

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

4

5 回答 5

2

每个设备都有每个应用程序的最大 RAM 上限。如果清单中的此调用不能缓解您的问题:

android:largeHeap="true"

那么您唯一的其他选择是使用 NDK 编写代码。但这是一个非常重要的事情,所以我会先尝试找出一个替代方案。

于 2013-01-18T18:36:27.507 回答
2

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

但是,此答案表明您可以使用NDK分配更多内存。

于 2013-01-18T18:37:28.130 回答
1

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

于 2013-01-18T18:33:01.710 回答
0

您可以使用字节缓冲区

ByteBuffer byteBuffer = ByteBuffer.allocate( bigSize);
于 2013-01-18T18:45:50.523 回答
-2

是的,当应用程序使用大内存时会发生此内存问题。调用 System.gc(); 这将明确清除垃圾收集器。android 中的每个应用程序都使用有限的内存量,大约为 16mb。所以试试这个。

于 2013-01-18T18:36:45.817 回答