2010-03-18 4 views
1

В Javadoc из WeakHashMap.html, он сказалуменьшить использование памяти С WeakHashMap

«Каждый ключевой объект в WeakHashMap является хранится косвенно в качестве референта в слабой ссылки. Поэтому ключ автоматически удалены только после слабые ссылки на него, как внутри , так и за пределами карты, были , очищенные сборщиком мусора. "

А потом

Обратите внимание, что значение объекта может относиться косвенно ключу через WeakHashMap себя; то есть значение объект может сильно ссылаться на какой-то другой ключевой объект, связанный с ним объект значения , в свою очередь, сильно ссылается на ключ первого объекта значения.

Но не следует ли использовать ключ и значение для слабых ссылок в WeakHashMap? т. Е. Если в памяти недостаточно памяти, GC освободит память, удерживаемую объектом значения (поскольку в большинстве случаев объект значения скорее всего занимает больше памяти, чем ключевой объект)?

И если GC бесплатный объект Value, объект Key также может быть бесплатным?

В принципе, я ищу HashMap, который уменьшит использование памяти при низкой памяти (GC собирает значение и ключевые объекты, если необходимо).

Возможно ли это на Java?

спасибо.

ответ

1

Слабые ссылки не подходят для кешей - NetBeans делает это и может пойти глупо.

SoftReference - это то, что вы хотите. На самом деле это довольно сложно сделать правильно - скопируйте чужое решение. Некоторые люди советуют напрямую управлять кэшами.

Reference s Работает только с одной ссылкой. Было предложено добавить «эфемероны» к Java SE, но я не видел, чтобы реализация шла с этим.

+0

Я до сих пор ничего не слышал о «SoftReference». Они ждут, пока куча станет недостаточной для освобождения, что производительность страдает из-за увеличения активности GC (ну, может быть, в вашем случае это будет нормально работать). Вы также можете использовать что-то вроде карты LRU. Ehcache также является возможным решением. –

1

Идея состоит в том, что вы можете использовать эту карту как структуру данных «поиска», которая сохраняет только ключи-значения-пары, на которые по-прежнему можно ссылаться (через ключ). Тем не менее, хотя основная идея хорошая, я помню, что это было не так полезно, как я надеялся.

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

  • Нет связанных вопросов^_^