我遇到了java.util HashMap的OOM问题,所以我正在寻找内存友好的HashMap替代标准Java Hashmap。我尝试了Trove并且它有所改进,但仍然不时地与OOM结束。如果内存有效,我可以适应一些速度损失。
我不是在寻找数据库。只要它们脱机工作,基于文件的HashMap实现也很好。我正在存储像int和byte这样的原语。
此外,请说明您是否有任何经验以及您在记忆方面的改进程度。
答案 0 :(得分:5)
我可以想到两个对您有用的选项 - 这最好完全取决于您的应用程序。 第一种是使用WeakReference或SoftReference。现在请记住,从Android 2.3开始,VM变得更加激进,因此收集VM可能会更频繁地收集这些类型的引用。就个人而言,我不是因为这个原因而使用这些类型的参考文献的忠实粉丝,但是有些人可能会争论不同。 第二个选项,也是我建议的选项,是查看LRU缓存。您可以使用LinkedHashMap实现自己的LRU缓存。但是,如果您使用地图存储位图,我强烈建议您查看Android兼容包提供的位图缓存,其中包括位图缓存。 以下是您可以用来阅读的一些链接:
Android Bitmap Cache and why you should avoid Weak/Soft References
答案 1 :(得分:3)
您应该查看ArrayMap和SparseArray。这些是在android中使用HashMap的内存有效替代方案。