4

我在使用 java.util HashMap 时遇到 OOM 问题,因此我正在寻找标准 Java Hashmap 的内存友好 HashMap 替代品。我尝试了 Trove,它有所改善,但仍不时出现 OOM。如果内存有效,我可以适应一些速度损失。

我不是在寻找数据库。基于文件的 HashMap 实现也可以,只要它们离线工作。我正在存储像 int 和 byte 这样的原语。

另外,请说明您是否有任何经验以及您在记忆方面的进步程度。

4

2 回答 2

5

我可以想到两个对您有用的选项——最好的选项完全取决于您的应用程序。第一种是使用 Wea​​kReference 或 SoftReference。现在请记住,从 Android 2.3 开始,VM 变得更加激进,因此收集 VM 可能会更频繁地收集这些类型的引用。就个人而言,我不是出于这个唯一原因使用这些类型的参考资料的超级粉丝,但有些人可能会提出不同的看法。第二种选择,也是我推荐的一种选择,是查看 LRU 缓存。您可以使用 LinkedHashMap 实现自己的 LRU 缓存。但是,如果您使用地图来存储位图,我强烈建议您查看包含位图缓存的 Android 兼容包提供的位图缓存。以下是一些您可以用来阅读的链接:

弱引用

软引用

使用 LinkedHashMap 的 LRU 缓存

Android 位图缓存以及为什么应该避免弱/软引用

于 2012-06-01T01:54:39.223 回答
4

你应该看看ArrayMapSparseArray。这些是在 android 中使用 HashMap 的内存高效替代方案。

于 2015-08-17T06:55:04.150 回答