我遇到了java.util HashMap的OOM問題,所以我正在尋找內存友好的HashMap替代標準Java Hashmap。我嘗試了Trove,並且稍微改進了一些,但仍然不時以OOM結尾。如果內存有效,我可以適應一些速度損失。Android應用程序的HashMap替代品
我不是在尋找一個數據庫。只要脫機工作,基於文件的HashMap實現也可以。我正在存儲像int和byte這樣的基元。
此外,請指出您是否有任何經驗以及您在內存方面的改進程度。
我遇到了java.util HashMap的OOM問題,所以我正在尋找內存友好的HashMap替代標準Java Hashmap。我嘗試了Trove,並且稍微改進了一些,但仍然不時以OOM結尾。如果內存有效,我可以適應一些速度損失。Android應用程序的HashMap替代品
我不是在尋找一個數據庫。只要脫機工作,基於文件的HashMap實現也可以。我正在存儲像int和byte這樣的基元。
此外,請指出您是否有任何經驗以及您在內存方面的改進程度。
我可以想到兩種方法可以爲你工作 - 這最好的完全取決於你的應用程序。 首先是使用WeakReference或SoftReference。現在請記住,從Android 2.3開始,虛擬機變得更加激進,因此收集虛擬機可能會更頻繁地收集這些類型的引用。就我個人而言,我並不是因爲這個唯一原因而使用這些類型的引用,但有些人可能會有不同的爭論。 第二個選項,我會推薦的選項是查找LRU緩存。您可以使用LinkedHashMap實現自己的LRU緩存。但是,如果您使用地圖來存儲位圖,我強烈建議您查看由Android兼容性軟件包提供的位圖緩存,其中包含位圖緩存。 這裏是你可以用它來上閱讀了幾個環節:
Android Bitmap Cache and why you should avoid Weak/Soft References
感謝您提供有關LRU緩存的啓發。這個想法也非常適合我想用我的HashMaps:我投票的關鍵和贏得最高票的那個。所以使用LRU Cache將使我能夠以最低的投票速度慢慢擺脫那些問題。 我想我會用這個:http://developer.android.com/reference/android/util/LruCache.html – Erol
你應該看看ArrayMap和SparseArray。這些是在android中使用HashMap的內存高效替代方案。
什麼存儲在散列表中?多少項目? –
我正在存儲基元。 – Erol
多少項? –