1

有时,需要绕过应用程序的堆内存限制并使用超出允许范围的内存。

我想到了一个解决方案,其中包括一种缓存机制,它将字节存储在本机内存中(不是在堆内存中,而是在非托管内存中)。

当然,我会考虑系统的最大可用大小。

所以,对直接缓冲区有所了解,我用它在本机内存中存储了一个字节数组:

  final ByteBuffer nativeBytes=ByteBuffer.allocateDirect(bytes.length);
  nativeBytes.put(bytes);

但是,似乎在 Android 上,用于此的内存是在堆中使用的,而不是在本机内存中使用的。

到底是怎么回事?是否有一种简单的替代方法可以从本机内存存储和加载数据?

4

1 回答 1

0

您可以使用 NDK 实现一些东西,它会在本机堆中为您分配内存并使用 JNI 与其通信。本机部分在 C 中实现,并使用malloc()调用在本机堆中分配内存。不过,您仍然会受到每个进程堆最大值的影响。

这是另一种选择。与其尝试在自己的进程中使用本机堆,不如在另一个进程中使用 dalvik 堆。

创建一个服务并在另一个进程中运行该服务。您可以在服务和应用程序的其余部分之间来回发送数据。堆限制是每个进程的,因此这有效地使您的应用程序可以使用的内存量加倍。

当然,这可能对您的特定情况没有帮助,但很高兴知道此选项可用。

于 2012-09-04T21:45:29.183 回答