В Javadoc из WeakHashMap.html, он сказалуменьшить использование памяти С WeakHashMap
«Каждый ключевой объект в WeakHashMap является хранится косвенно в качестве референта в слабой ссылки. Поэтому ключ автоматически удалены только после слабые ссылки на него, как внутри , так и за пределами карты, были , очищенные сборщиком мусора. "
А потом
Обратите внимание, что значение объекта может относиться косвенно ключу через WeakHashMap себя; то есть значение объект может сильно ссылаться на какой-то другой ключевой объект, связанный с ним объект значения , в свою очередь, сильно ссылается на ключ первого объекта значения.
Но не следует ли использовать ключ и значение для слабых ссылок в WeakHashMap? т. Е. Если в памяти недостаточно памяти, GC освободит память, удерживаемую объектом значения (поскольку в большинстве случаев объект значения скорее всего занимает больше памяти, чем ключевой объект)?
И если GC бесплатный объект Value, объект Key также может быть бесплатным?
В принципе, я ищу HashMap, который уменьшит использование памяти при низкой памяти (GC собирает значение и ключевые объекты, если необходимо).
Возможно ли это на Java?
спасибо.
Я до сих пор ничего не слышал о «SoftReference». Они ждут, пока куча станет недостаточной для освобождения, что производительность страдает из-за увеличения активности GC (ну, может быть, в вашем случае это будет нормально работать). Вы также можете использовать что-то вроде карты LRU. Ehcache также является возможным решением. –