【问题标题】:HashMap Alternatives for Android ApplicationAndroid 应用程序的 HashMap 替代方案
【发布时间】:2012-06-06 06:55:12
【问题描述】:

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

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

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

【问题讨论】:

  • 哈希图中存储了什么?有多少项?
  • 我正在存储原语。
  • 为什么这么重要?高到足以导致 OOM。
  • @DanielA.White 假设我存储的物品少于 15 件。使用HashMap或ArrayMap是否明智?

标签: java android hashmap out-of-memory


【解决方案1】:

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

Weak References

Soft References

LRU Cache using LinkedHashMap

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

【讨论】:

  • 感谢您对 LRU 缓存的启发。这个想法也非常适合我想要的 HashMaps:我正在为键投票,得票最高的人获胜。所以使用 LRU Cache 可以让我慢慢摆脱那些票数最少的人。我想我会用这个:developer.android.com/reference/android/util/LruCache.html
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多