2012-06-01 60 views
4

我遇到了java.util HashMap的OOM問題,所以我正在尋找內存友好的HashMap替代標準Java Hashmap。我嘗試了Trove,並且稍微改進了一些,但仍然不時以OOM結尾。如果內存有效,我可以適應一些速度損失。Android應用程序的HashMap替代品

我不是在尋找一個數據庫。只要脫機工作,基於文件的HashMap實現也可以。我正在存儲像int和byte這樣的基元。

此外,請指出您是否有任何經驗以及您在內存方面的改進程度。

+3

什麼存儲在散列表中?多少項目? –

+0

我正在存儲基元。 – Erol

+0

多少項? –

回答

5

我可以想到兩種方法可以爲你工作 - 這最好的完全取決於你的應用程序。 首先是使用WeakReference或SoftReference。現在請記住,從Android 2.3開始,虛擬機變得更加激進,因此收集虛擬機可能會更頻繁地收集這些類型的引用。就我個人而言,我並不是因爲這個唯一原因而使用這些類型的引用,但有些人可能會有不同的爭論。 第二個選項,我會推薦的選項是查找LRU緩存。您可以使用LinkedHashMap實現自己的LRU緩存。但是,如果您使用地圖來存儲位圖,我強烈建議您查看由Android兼容性軟件包提供的位圖緩存,其中包含位圖緩存。 這裏是你可以用它來上閱讀了幾個環節:

Weak References

Soft References

LRU Cache using LinkedHashMap

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

+0

感謝您提供有關LRU緩存的啓發。這個想法也非常適合我想用我的HashMaps:我投票的關鍵和贏得最高票的那個。所以使用LRU Cache將使我能夠以最低的投票速度慢慢擺脫那些問題。 我想我會用這個:http://developer.android.com/reference/android/util/LruCache.html – Erol

2

你應該看看ArrayMapSparseArray。這些是在android中使用HashMap的內存高效替代方案。