Интернет магазин китайских планшетных компьютеров



Компьютеры - Слабая ссылка - Реализация и использование

23 января 2011


Оглавление:
1. Слабая ссылка
2. Реализация и использование



В распространённых сейчас языках программирования со сборкой мусора — Java и C#, — слабые ссылки поддерживаются на уровне системных библиотек. В Java для этого служит классы java.lang.ref.WeakReference и java.lang.ref.SoftReference, в C# — класс System.WeakReference. Используются они принципиально одинаково: когда требуется сохранить слабую ссылку, создаётся объект-реферер, которому передаётся сильная ссылка. Переданная сильная ссылка тут же освобождается, и в реферере хранится ссылка, существование которой не может помешать сборщику мусора удалить соответствующий объект. Когда требуется воспользоваться слабой ссылкой, у реферера вызывается метод get, который возвращает сильную ссылку на объект, если он ещё существует, или null, если объект уже удалён сборщиком мусора. Поскольку get возвращает именно сильную ссылку, во время её использования объект удалён не будет, но после того, как использование этой ссылки прекратилось, он снова становится доступным для сборки мусора. Таким образом, при каждом использовании слабой ссылки программа должна обязательно проверить её на равенство NULL.

Режим использования слабых ссылок определяется задачей. Обычная практика — хранение в коллекциях слабых ссылок на объекты, которые нужны только до тех пор, пока приложение эти объекты использует. Когда объект более не требуется и сильные ссылки на него удаляются, слабые ссылки, сохранённые в коллекции, не препятствуют удалению объекта из памяти, благодаря чему можно обойтись без явного удаления их из коллекции.

Особенность класса SoftReference в Java — сборщик мусора при удалении объекта учитывает частоту обращений к нему через эту ссылку, что может быть полезно для реализации кэширования данных, располагающихся, например, на внешних устройствах — коллекция-кэш автоматически дольше удерживает те объекты, к которым чаще обращаются.

Чтобы слабые ссылки на уже не существующие объекты не засоряли память, системные библиотеки предоставляют механизмы для учёта таких ссылок. Вариантом такого механизма являются очереди ссылок — специальные объекты, которые передаются рефереру при создании. Когда сборщик мусора уничтожает объект, на который ссылается слабая ссылка, он помещает в ранее переданную очередь ссылок ссылку на соответствующий реферер. Таким образом, программе доступен список рефереров, содержащих «мёртвые» ссылки, и она может выполнить их удаление в любой подходящий момент.



Просмотров: 2256


<<< Сборка мусора
Таблица дескрипторов >>>