如何在Android上预分配最大堆空间

时间:2014-11-23 02:13:56

标签: java android

我正在开发一个需要大量堆空间的图像处理应用程序,并通过网络发送这些图像。问题是每个图像都会产生类似

的消息
Grow heap (frag case) to 16.38M for 1536000 byte allocation 

这种增长似乎需要很长时间,因为当我从计算机发送图像时需要1秒钟,但使用我的Android应用程序需要大约1分30秒。

我的问题是,有没有办法预先分配最大堆大小,以便堆不必继续增长?

1 个答案:

答案 0 :(得分:1)

  

...有没有办法预先分配最大堆大小,以便堆不必继续增长?

我不这么认为。阅读Android内存管理article并未发现任何内容。

在经典Java中,您可以设置初始堆大小以避免不断增长堆的性能开销。但Android上的假设似乎是你应该在任何时候都尽量减少内存使用量。

如果您只是分配一个非常大的数组并立即使其无法访问,您可能会获得一些“快乐”。 GC应该增加堆,以便它可以保存数组......并且数组占用的空间通常会被回收并在下一个GC循环中可用。另一方面,当GC回收大量内存时,它可能会缩小堆,从而将大部分空间返回给操作系统。


话虽如此,您可能会被建议更改您的应用,以便不需要在内存中保存大量图像。听起来像你可能有某种类型的内存泄漏。阅读这些链接: