2013-04-29 3 views
0

Я запускаю игру, когда я запускаю загрузку изображений в изображениях WeakHashMap. Когда я запускаю свою игру, моя оперативная память просто продолжает расти, а затем, в конечном счете, мой WeakHashMap просто выгружает все свои данные. Это относится к сборке мусора? Любые решения?WeakHashMap Случайно очищает

+5

Что вы ожидали? Вы используете только «WeakHashMap», когда хотите, чтобы записи удалялись всякий раз, когда ключ может быть собран из мусора. –

+0

WeakHashMap предназначен для использования в кеше, где данные могут время от времени переходить в «пуф», но могут быть перезагружены из сети или какого-либо другого источника, если это произойдет. –

ответ

1

Вы можете создать HashMap, используя SoftReferences вместо WeakReferences - сборщик мусора будет немного менее охотно собирать его. Просто скопируйте исходный код WeakHashMap, заменив WeakReferences на SoftReferences.

0

A java.util.WeakHashMap - это тип карты, который, как может показаться в описании, сохраняет только слабые ссылки на его ключи. Слабые ссылки, как вы знаете, являются ссылками, которые не мешают сборщику мусора собирать ссылочные объекты. Чтобы предотвратить сбор мусора, вы должны поддерживать сильную ссылку на объект где-то.

Если вы хотите, чтобы данные были защищены от сбора мусора, храните их в обычном HashMap. Для вашего конкретного приложения вы можете написать свою собственную реализацию карты, которая сохраняет мягкие ссылки (ссылки, которые gc только очищает, если это необходимо, а не всегда очищает) к изображениям, и автоматически загружать отсутствующее искусство, когда это искусство призвал к. (Может быть сложно, если вам нужно, чтобы все были потокобезопасными, хотя ...)

Смежные вопросы