Spec-Zone.ru › OpenJDK 27

Класс SoftReference<T>

java.lang.Object
java.lang.ref.Reference<T>
java.lang.ref.SoftReference<T>
Параметры типа:
T - тип объекта, на который ссылается ссылка
public non-sealed class SoftReference<T> extends Reference<T>
Объекты мягких ссылок, которые очищаются сборщиком мусора по его усмотрению в ответ на потребность в памяти. Мягкие ссылки чаще всего используются для реализации кэшей с учетом потребления памяти.

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

Гарантируется, что все мягкие ссылки на объекты, достижимые через мягкие ссылки, будут очищены до того, как виртуальная машина выбросит OutOfMemoryError. В остальном никаких ограничений на время очистки мягкой ссылки или на порядок очистки набора таких ссылок на разные объекты не накладывается. Однако реализациям виртуальных машин рекомендуется избегать очистки недавно созданных или недавно использовавшихся мягких ссылок.

Непосредственные экземпляры этого класса можно использовать для реализации простых кэшей; этот класс или его подклассы также можно использовать в более крупных структурах данных для реализации более сложных кэшей. Пока объект, на который ссылается мягкая ссылка, сильно достижим, то есть фактически используется, мягкая ссылка не будет очищена. Таким образом, сложный кэш может, например, предотвратить удаление наиболее недавно использовавшихся элементов, сохраняя сильные ссылки на эти элементы, а остальные элементы оставить на усмотрение сборщика мусора.

С версии:
1.2

Краткое описание конструкторов

Конструктор Описание
SoftReference(T referent)
Создает новую мягкую ссылку на заданный объект.
SoftReference(T referent, ReferenceQueue<? super T> q)
Создает новую мягкую ссылку на заданный объект и регистрирует ее в заданной очереди.

Краткое описание методов

Модификатор и тип Метод Описание
T get()
Возвращает объект, на который ссылается этот объект-ссылка.

Методы, объявленные в классе Reference

clear, clone, enqueue, isEnqueued, reachabilityFence, refersTo
Модификатор и тип Метод Описание
void clear()
Очищает этот объект-ссылку.
protected Object clone()
Выбрасывает CloneNotSupportedException.
boolean enqueue()
Очищает этот объект-ссылку, а затем пытается добавить его в очередь, с которой он зарегистрирован, если такая есть.
boolean isEnqueued()
Устарело.
Изначально этот метод предназначался для проверки того, был ли объект-ссылка очищен и помещен в очередь, но такая проверка никогда не была реализована.
static void reachabilityFence(Object ref)
Гарантирует, что заданный объект остается сильно достижимым.
final boolean refersTo(T obj)
Проверяет, является ли объект, на который ссылается этот объект-ссылка, obj.

Методы, объявленные в классе Object

equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
boolean equals(Object obj)
Указывает, равен ли какой-либо другой объект этому объекту.
protected void finalize()
Устарело, подлежит удалению: этот элемент API может быть удален в будущей версии.
Финализация устарела и подлежит удалению в одном из следующих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает значение хеш-кода этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt, либо до истечения заданного времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или interrupt, либо до истечения заданного времени.

Подробное описание конструкторов

SoftReference

public SoftReference(T referent)
Создает новую мягкую ссылку на заданный объект. Новая ссылка не регистрируется ни в одной очереди.
Параметры:
referent - объект, на который будет ссылаться новая мягкая ссылка

SoftReference

public SoftReference(T referent, ReferenceQueue<? super T> q)
Создает новую мягкую ссылку на заданный объект и регистрирует ее в заданной очереди.
Параметры:
referent - объект, на который будет ссылаться новая мягкая ссылка
q - очередь, в которой нужно зарегистрировать ссылку, или null, если регистрация не требуется

Подробное описание методов

get

public T get()
Возвращает объект, на который ссылается этот объект-ссылка. Если этот объект-ссылка был очищен программой или сборщиком мусора, данный метод возвращает null.
Переопределяет:
get в классе Reference<T>
Возвращает:
Объект, на который ссылается этот объект-ссылка, или null, если этот объект-ссылка был очищен
См. также:
  • Reference.refersTo(T)

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе документации Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2026, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, 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.

Spec-Zone.ru

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