Spec-Zone.ru › OpenJDK 21

Пакет java.lang.ref

package java.lang.ref
Предоставляет классы объектов-ссылок, которые поддерживают ограниченную степень взаимодействия с сборщиком мусора. Программа может использовать объект ссылки для поддержания ссылки на другой объект таким образом, что этот последний объект всё ещё может быть удалён сборщиком. Программа также может организовать получение уведомления некоторое время спустя после того, как сборщик определил, что достижимость данного объекта изменилась.

Спецификация пакета

Объект-ссылка инкапсулирует ссылку на какой-либо другой объект, чтобы сама ссылка могла быть проверена и изменена как любой другой объект. Предоставляются три типа объектов-ссылок, каждый из которых слабее предыдущего: мягкие, слабые и фантомные. Каждый тип соответствует разному уровню достижимости, как определено ниже. Мягкие ссылки предназначены для реализации кешей, чувствительных к памяти; слабые ссылки — для реализации канонизирующих отображений, которые не препятствуют удалению ключей (или значений); а фантомные ссылки — для планирования действий по очистке посмертно. Действия по очистке посмертно могут быть зарегистрированы и управляются Cleaner.

Каждый тип объектов-ссылок реализуется подклассом абстрактного базового класса Reference. Экземпляр одного из этих подклассов инкапсулирует единственную ссылку на конкретный объект, называемый ссылочным объектом. Каждый объект ссылки предоставляет методы для получения и очистки ссылки. Помимо операции очистки, объекты ссылок неизменяемы, поэтому не предоставляется никакая set операция. Программа может далее создать подклассы этих подклассов, добавив необходимые поля и методы, или может использовать эти подклассы без изменений.

Уведомление

Программа может запросить уведомление об изменениях в достижимости объекта, зарегистрировав соответствующий объект ссылки в очереди ссылок в момент создания объекта ссылки. Некоторое время спустя после того, как сборщик мусора определит, что достижимость ссылочного объекта изменилась на значение, соответствующее типу ссылки, он очистит ссылку и добавит её в соответствующую очередь. В этот момент ссылка считается в очереди. Программа может удалять ссылки из очереди, либо опрашивая её, либо ожидая, пока ссылка станет доступной. Очереди ссылок реализуются классом ReferenceQueue.

Связь между зарегистрированным объектом ссылки и его очередью односторонняя. То есть, очередь не отслеживает ссылки, зарегистрированные в ней. Если зарегистрированная ссылка сама станет недоступной, она никогда не будет помещена в очередь. Программа, использующая объекты ссылок, несет ответственность за обеспечение того, чтобы объекты оставались доступными до тех пор, пока программа заинтересована в их ссылочных объектах.

Хотя некоторые программы выберут выделение потока для удаления объектов ссылок из одной или нескольких очередей и их обработки, это совсем не обязательно. Часто эффективным приёмом является проверка очереди ссылок во время выполнения какой-либо другой достаточно частой операции. Например, хеш-таблица, использующая слабые ссылки для реализации слабых ключей, может опрашивать свою очередь ссылок каждый раз при обращении к таблице. Именно так работает класс WeakHashMap. Поскольку метод ReferenceQueue.poll просто проверяет внутреннюю структуру данных, эта проверка добавит небольшую нагрузку к методам доступа к хеш-таблице.

Достижимость

От наибольшей к наименьшей, различные уровни достижимости отражают жизненный цикл объекта. Они операционально определяются следующим образом:
  • Объект является строго достижимым, если к нему можно получить доступ из некоторого потока без прохождения через какие-либо объекты ссылок. Недавно созданный объект строго достижим потоком, который его создал.
  • Объект является мягко достижимым, если он не строго достижим, но может быть достигнут прохождением через мягкую ссылку.
  • Объект является слабо достижимым, если он не строго и не мягко достижим, но может быть достигнут прохождением через слабую ссылку. Когда слабые ссылки на слабо достижимый объект очищаются, объект становится пригодным для финализации.
  • Объект является фантомно достижимым, если он не строго, не мягко и не слабо достижим, был финализирован и на него ссылается какая-либо фантомная ссылка.
  • Наконец, объект является недостижимым и, следовательно, пригодным для удаления, когда он не достижим ни одним из вышеперечисленных способов.
С тех пор как:
1.2
Пакет Описание
java.lang
Предоставляет классы, фундаментальные для проектирования языка программирования Java.
Класс Описание
Cleaner
Cleaner управляет набором ссылок на объекты и соответствующими действиями очистки.
Cleaner.Cleanable
Cleanable представляет объект и действие очистки, зарегистрированное в Cleaner.
PhantomReference<T>
Фантомные объекты ссылок, которые помещаются в очередь после того, как сборщик мусора определяет, что их ссылочные объекты могут быть удалены.
Reference<T>
Абстрактный базовый класс для объектов ссылок.
ReferenceQueue<T>
Очереди ссылок, в которые зарегистрированные объекты ссылок добавляются сборщиком мусора после обнаружения соответствующих изменений в достижимости.
SoftReference<T>
Мягкие объекты ссылок, которые очищаются по усмотрению сборщика мусора в ответ на потребность в памяти.
WeakReference<T>
Слабые объекты ссылок, которые не препятствуют финализации, финализации и удалению их ссылочных объектов.

© 1993, 2023, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/ref/package-summary.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API