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