【发布时间】:2012-05-23 10:39:18
【问题描述】:
我有一个 Android 应用程序,它遍历包含数千个整数的数组,并将它们用作键值来访问整数对(我们称它们为 id),以便使用它们进行计算。它需要尽可能快地完成,并最终返回对应用程序至关重要的结果。
我尝试将 HashMap 加载到内存中以快速访问这些数字,但它导致 OOM 异常。我还尝试将这些 id 写入 RandomAccessFile 并将它们在文件上的偏移量存储到另一个 HashMap 但它太慢了。另外,新的只存储偏移量的 HashMap 仍然占用很大的内存。
现在我正在考虑使用 SQLite,但我不确定它是否会更快。是否有任何结构或库可以帮助我解决这个问题?
编辑:密钥数量超过 2000 万,而我只需要访问数千个。我不知道我会事先访问哪些,因为它会随着用户输入而变化。
【问题讨论】:
-
数千个整数不能占用这么多内存,你一定是做错了什么......
-
你是如何保存密钥的?最初保存在哪里?我建议以某种方式以排序方式保存 em,并让文件成为范围适合键的值的桶......
-
密钥被保存到 HashMap,然后在管理控制台中序列化。稍后,在 Android 应用程序中,它们被反序列化回 HashMap。所以我有机会修改这些密钥的存储方式,但我无法改变它们在我的算法中用作密钥的方式。我不明白对它们进行排序的好处。
-
如果您的应用需要特定数量的内存,但您的部署平台不允许您使用所需的内存,没有简单的解决方案。
-
查看我的答案以了解为什么存储桶会有所帮助
标签: java android database memory map