java - Android 应用程序的 HashMap 替代品

标签 java android hashmap out-of-memory

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

我不是在寻找数据库。只要离线工作,基于文件的 HashMap 实现也很好。我正在存储 int 和 byte 等原语。

另外,请说明您是否有过任何经验,以及您在内存力方面有多大进步。

最佳答案

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

Weak References

Soft References

LRU Cache using LinkedHashMap

Android Bitmap Cache and why you should avoid Weak/Soft References

关于java - Android 应用程序的 HashMap 替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10843393/

相关文章:

java - 与 HTML 标签匹配的正则表达式模式

java - 如何使用 Junit4 获取故障跟踪

java - 如何在 Android Q 中检测拨出电话号码

android - 在 SwipeRefreshLayout 内滚动时隐藏和显示自定义 View

java - java空异常

android - 应用版本取决于buildType-如何?

java - 如何根据键值将 2 个 ArrayList<HashMap<String, String>> 合并为 1 个?

php - 为什么不允许对象作为关联数组中的键?

java - 如何在 Java 中创建哈希表?

android - 为什么在 `this` 之前有 Activity 名称?