| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 | ||
В общем случае нет, т.к. у SoftReference будут не корректно работать hashCode(), equals() и compareTo(). Плюс не все коллекции нормально переварят "неожиданную" потерю объектов. Посмотри как реализован WeakHashMap. |
| Автор: batigoal 9.9.2005, 11:34 |
| Ok, посмотрю. |