Как заставить JVM очистить все WeakReferences / ключи WeakHashMap - PullRequest
4 голосов
/ 12 октября 2011

Есть ли способ заставить jvm очистить все WeakReferences (или все ключи WeakHashMap), если на них больше не ссылаются регулярные ссылки?

Запуск сборки мусоране сработает, слабые ссылки остаются живы.(Я читал, что слабые ссылки будут очищаться только при нехватке памяти).

1 Ответ

1 голос
/ 12 октября 2011

SoftReferences очищаются при нехватке памяти.

Слабые ссылки очищаются чаще (как все время, когда у объекта остаются только слабые ссылки)

Проверьте официальный Java-документ дляпакет (документация пакета полезна для объяснения): http://download.oracle.com/javase/1.5.0/docs/api/java/lang/ref/package-summary.html

Можете ли вы процитировать точное сообщение, которое вы видите от Tomcat при завершении работы?Вы уверены, что не ошиблись?Для Tomcat важно то, что нет жестких ссылок, прикрепляющих ClassLoader для ServletContext.

Re WeakHashMap: http://download.oracle.com/javase/1.5.0/docs/api/java/util/WeakHashMap.html Слабо удерживаются только ключи.Что вы используете в качестве «стоимости»?сильно ли само значение ссылается на свой собственный "ключ"?В связи с этим я подвергаю сомнению ваше понимание того, что WeakHashMap предоставляет для вас (это предполагает, что это правильный инструмент для работы).

По моему опыту вы можете очистить WeakReferences с Sun JVM 5 с помощьюSystem.gc () на 100% надежен для меня при первом сканировании GC.Но они не гарантируют этого.

...