2012-06-01 2 views
4

У меня проблемы с OOM с java.util HashMap, поэтому я ищу альтернативы HashMap для памяти, совместимые со стандартным Java Hashmap. Я попробовал Trove, и это немного улучшилось, но все же заканчивается OOM время от времени. Я могу приспособить некоторые потери скорости, если память эффективна.Альтернативы HashMap для Android-приложений

Я не ищу БД. Файловые реализации HashMap также прекрасны, пока они работают в автономном режиме. Я храню примитивы, такие как int и byte.

Также укажите, были ли у вас какие-либо впечатления и какое улучшение было у вас в памяти.

+3

Что хранятся в hashmap? сколько предметов? –

+0

Я храню примитивы. – Erol

+0

Сколько предметов? –

ответ

5

Я могу придумать два варианта, которые будут работать для вас - это лучшее, что полностью зависит от вашего приложения. Первое - использовать WeakReference или SoftReference. Теперь имейте в виду, что с Android 2.3 VM стала намного более агрессивной, поэтому сбор VM может чаще собирать эти типы ссылок. Лично я не большой поклонник использования этих типов ссылок по этой единственной причине, но некоторые люди могут спорить по-другому. Второй вариант, который я бы рекомендовал, - это посмотреть в кеш LRU. Вы можете реализовать свой собственный кеш LRU с помощью LinkedHashMap. Но если вы используете карту для хранения битмапов, я бы настоятельно предложил вам взглянуть на битмап-кэш, предоставляемый пакетом совместимости Android, который включает в себя бит-карты. Вот несколько ссылок, которые можно использовать для чтения на:

Weak References

Soft References

LRU Cache using LinkedHashMap

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

+0

Спасибо, что проинформировал меня о LRU Cache. Идея также очень подходит с тем, что я хочу с помощью своих HashMaps: я голосую за ключи и тот, у кого самые высокие голоса. Поэтому использование LRU Cache позволит мне постепенно избавиться от тех, у кого есть минимальный голос. Я думаю, что буду использовать это: http://developer.android.com/reference/android/util/LruCache.html – Erol

2

Вы должны взглянуть на ArrayMap и SparseArray. Это эффективные для памяти альтернативы использованию HashMap в android.