[英]Are ByteBuffers a good way to store > 1MB of data in Android?
我有一个需要在任何给定时刻在队列中存储3〜1MB字节数组的应用程序。 似乎最终发生的是我收到此消息
I/dalvikvm-heap﹕ Grow heap (frag case) to 4.827MB for 1058412-byte allocation
然后将我的byte[]
分配为0。
我尝试在清单中设置android:LargeHeap="true"
,但仍然会发生这种情况。
如果我使用ByteBuffers而不是byte[]
,是否可以存储这3 byte[]
对象而没有内存问题?
从症状(没有看到您的代码)看来,问题出在不是堆的总大小。 而是Android无法找到足够大的单个连续内存块供您的1MB阵列使用。 考虑到Android设备的资源限制,这不足为奇。 如果我对所发生的事情是正确的,那么我非常怀疑ByteBuffer
是否可以解决问题。 它仍然需要分配一个足够大的单字节数组。
如果您的用例允许,您可以考虑将每个1MB byte[]
分成较小的块。 (这里有一篇不错的博客文章,介绍了一种方法。)与查找单个大小为1MB的块相比,该系统将比查找单个大小为64KB(例如64KB)的空闲内存块要容易得多。 我已经成功地使用了这种方法(尽管使用的设计与上面的链接不同),即使是在总堆大小比旧堆小得多的旧设备(例如Android 2.2)上,加载的数据集也略大于2.5MB最新的设备。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.