我正在开发一个需要大量堆空间的图像处理应用程序,并通过网络发送这些图像。问题是每个图像都会产生类似
的消息Grow heap (frag case) to 16.38M for 1536000 byte allocation
这种增长似乎需要很长时间,因为当我从计算机发送图像时需要1秒钟,但使用我的Android应用程序需要大约1分30秒。
我的问题是,有没有办法预先分配最大堆大小,以便堆不必继续增长?
答案 0 :(得分:1)
...有没有办法预先分配最大堆大小,以便堆不必继续增长?
我不这么认为。阅读Android内存管理article并未发现任何内容。
在经典Java中,您可以设置初始堆大小以避免不断增长堆的性能开销。但Android上的假设似乎是你应该在任何时候都尽量减少内存使用量。
如果您只是分配一个非常大的数组并立即使其无法访问,您可能会获得一些“快乐”。 GC应该增加堆,以便它可以保存数组......并且数组占用的空间通常会被回收并在下一个GC循环中可用。另一方面,当GC回收大量内存时,它可能会缩小堆,从而将大部分空间返回给操作系统。
话虽如此,您可能会被建议更改您的应用,以便不需要在内存中保存大量图像。听起来像你可能有某种类型的内存泄漏。阅读这些链接: