Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > "Слабые" ссылки


Автор: batigoal 9.9.2005, 09:20
Читаю сейчас книгу Брюса Тейта "Горький вкус Java". Книга посвящена т.н. "анти-паттернам", то есть типичным ошибкам проектирования и написания Java-приложений. Одна из глав посвящена проблемам утечки памяти, которая возможна и в Java. В числе различных способов решения этой проблемы (с ограниченной областью применения) предлагается использование неких "слабых" ссылок. Но не объясняется - что это такое?

P.S. Еще там упоминаются "мягкие" и "фантомные" ссылки.

Автор: anonymouse 9.9.2005, 10:08
вот посмотри

http://www.jetinfo.ru/1998/11-12/1/article1.11-12.199831.html

Автор: LSD 9.9.2005, 10:25
К той статье я добавлю еще одно: SoftReference всегда будет очищенна перед выбрасыванием OutOfMemoryError (и по опыту они всегда очищаются при вызове System.gc()), а вот для WeakReference это не гарантируется. Они очищаются в зависимости от веремени последнего доступа (получить OutOfMemoryError при использовании WeakReference вполне реально). Есть еще класс WeakHashMap который использует WeakReference, для хранения объектов, удобно использовать для кешей.

Автор: batigoal 9.9.2005, 11:13
Как я понял, суть в следующем: я могу не добавлять, скажем, объект в коллекцию напрямую, а "обернуть" его в SoftReference, и тогда правила сборки мусора для него будут отличаться от привычных (в сторону большей вероятности очистки). Правильно?

Автор: LSD 9.9.2005, 11:17
Цитата(Lamer @ 9.9.2005, 12:13)
Как я понял, суть в следующем: я могу не добавлять, скажем, объект в коллекцию напрямую, а "обернуть" его в SoftReference, и тогда правила сборки мусора для него будут отличаться от привычных (в сторону большей вероятности очистки). Правильно?

В общем случае нет, т.к. у SoftReference будут не корректно работать hashCode(), equals() и compareTo(). Плюс не все коллекции нормально переварят "неожиданную" потерю объектов. Посмотри как реализован WeakHashMap.

Автор: batigoal 9.9.2005, 11:34
Ok, посмотрю.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)