Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WeakReference 
:(
    Опции темы
ElectricalStorm
Дата 13.5.2004, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 547
Регистрация: 22.1.2004

Репутация: 5
Всего: 9



обьясните пожалуйста что такое WeakReference, SoftReference и как ими пользоваться и нужно ли вообще ?


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
AntonSaburov
Дата 13.5.2004, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Если в двух словах, то выглядит это следующим образом:

Как известно JAVA имеет сборщик мусора, который убирает те объекты, на которые ссылки нигде не присутствуют. Если же где-то на такой объект ссылка есть, то этот объект не уничтожается. Бывает ситуация, когда памяти уже не хватает и надо ее явным образом освободить - фактически присвоить ссылкам NULL. И это надо делать ручками. А потом этот объект надо снова восстанавливать. Что крайне неудобно.

Reference - это нечто вроде обертки, через которую можно обратится к созданному объекту. И как раз такого рода объекты сборщик при нехватке памяти уничтожает. А когда программа пробует получить ссылку на объект через reference, она получает в ответ NULL и должна заново создать объект.
Т.е. программист заявляя, что объект "обернут" reference, говорит следующее: "Если не хватит памяти, то этот объект можно уничтожить. А я напишу специальный код, который будет проверять этот объект на NULL и если что, создавать объект заново".

Таким образом система берет на себя хотя бы половину работы - автоматически уничтожает объекты - ей надо только сказать, какие можно. Восстанавливать надо самому. Но это все же лучше, чем все ручками.
PM MAIL WWW ICQ   Вверх
ElectricalStorm
Дата 13.5.2004, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 547
Регистрация: 22.1.2004

Репутация: 5
Всего: 9



это Вы про какие про SoftReference или про WeakReference ?


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
AntonSaburov
Дата 13.5.2004, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Вообще-то существует три типа:

SoftReference - "сборщик" может удалить этот объект, а может и не удалить. Это зависит от "сборщика".
WeakReference - "сборщик" всегда удаляет такой объект.
PhantomReference - "сборщик" помещает такой объект в очередь на удаление. И если программа подтверждает, что удалять можно, объект удаляется.

PM MAIL WWW ICQ   Вверх
LSD
Дата 13.5.2004, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



От себя добавлю, что в текущей реализации JVM от Sun (1.4.2) SoftReference, удалять или не удалять данную ссылку принимает на основе времени последнего доступа.
Я поставил эксперимент ограничив память для JVM, я в цикле начал создавать большое количество объектов: при использовании WeakReference нехватки памяти никогда не возникало, а при использовании SoftReference я довольно быстро получи OutOfMemoryError sad.gif . Вот такая история.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
ElectricalStorm
Дата 14.5.2004, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 547
Регистрация: 22.1.2004

Репутация: 5
Всего: 9



а в каких случаях стоит использовать WeakReference ?


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
AntonSaburov
Дата 14.5.2004, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата
а в каких случаях стоит использовать WeakReference

Эта ссылка будет уничтожаться при первом же запуске "сборщика". SoftReference, как уже упоминал LSD, не всегда так хорошо себя ведет.
PM MAIL WWW ICQ   Вверх
LSD
Дата 14.5.2004, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Есть такой класс WeakHashMap который использует для хранения объектов WeakReference, Sun рекомендует использовать его для кеширования объектов. Еще можешь посмотреть метод toString() у java.util.Date там есть пример использования SoftReference.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0527 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.