繁体   English   中英

ByteBuffers是在Android中存储> 1MB数据的好方法吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM