Spec-Zone.ru › OpenJDK 27

Класс VolatileCallSite

java.lang.Object
java.lang.invoke.CallSite
java.lang.invoke.VolatileCallSite
public non-sealed class VolatileCallSite extends CallSite
Объект VolatileCallSite — это CallSite, цель которого ведёт себя как volatile-переменная. Инструкция invokedynamic, связанная с VolatileCallSite, немедленно видит изменения цели своей точки вызова, даже если обновление происходит в другом потоке. Такая тесная связь между потоками может привести к снижению производительности.

В отличие от MutableCallSite, для volatile-точек вызова нет операции syncAll, поскольку каждая запись в volatile-переменную неявно синхронизируется с потоками-читателями.

В остальном VolatileCallSite взаимозаменяем с MutableCallSite.

С версии:
1.7
См. также:
  • MutableCallSite

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

Конструктор Описание
VolatileCallSite(MethodHandle target)
Создаёт точку вызова с volatile-привязкой к её цели.
VolatileCallSite(MethodType type)
Создаёт точку вызова с volatile-привязкой к её цели.

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

Модификатор и тип Метод Описание
final MethodHandle dynamicInvoker()
Создаёт дескриптор метода, эквивалентный инструкции invokedynamic, связанной с этой точкой вызова.
final MethodHandle getTarget()
Возвращает целевой метод точки вызова, который ведёт себя как поле VolatileCallSite с модификатором volatile.
void setTarget(MethodHandle newTarget)
Обновляет целевой метод этой точки вызова как volatile-переменную.

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

type
Модификатор и тип Метод Описание
MethodType type()
Возвращает тип цели этой точки вызова.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
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()
Переводит текущий поток в состояние ожидания до тех пор, пока он не будет разбужен, обычно посредством уведомления или прерывания.
final void wait(long timeoutMillis)
Переводит текущий поток в состояние ожидания до тех пор, пока он не будет разбужен, обычно посредством уведомления или прерывания, либо пока не истечёт заданное время.
final void wait(long timeoutMillis, int nanos)
Переводит текущий поток в состояние ожидания до тех пор, пока он не будет разбужен, обычно посредством уведомления или прерывания, либо пока не истечёт заданное время.

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

VolatileCallSite

public VolatileCallSite(MethodType type)
Создаёт точку вызова с volatile-привязкой к её цели. В качестве начальной цели задаётся дескриптор метода указанного типа, который при вызове выбрасывает IllegalStateException.
Параметры:
type — тип метода, который будет иметь эта точка вызова
Выбрасывает:
NullPointerException — если предложенный тип равен null

VolatileCallSite

public VolatileCallSite(MethodHandle target)
Создаёт точку вызова с volatile-привязкой к её цели. В качестве цели задаётся указанное значение.
Параметры:
target — дескриптор метода, который станет начальной целью точки вызова
Выбрасывает:
NullPointerException — если предложенная цель равна null

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

getTarget

public final MethodHandle getTarget()
Возвращает целевой метод точки вызова, который ведёт себя как поле VolatileCallSite с модификатором volatile.

Взаимодействие getTarget с памятью аналогично чтению из поля volatile.

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

Определён в:
getTarget в классе CallSite
Возвращает:
состояние связывания этой точки вызова — дескриптор метода, который может изменяться со временем
См. также:
  • setTarget(MethodHandle)

setTarget

public void setTarget(MethodHandle newTarget)
Обновляет целевой метод этой точки вызова как volatile-переменную. Тип новой цели должен соответствовать типу прежней цели.

Взаимодействие с памятью аналогично записи в volatile-поле. В частности, гарантируется, что все потоки увидят обновлённую цель при следующем вызове getTarget.

Определён в:
setTarget в классе CallSite
Параметры:
newTarget — новая цель
Выбрасывает:
NullPointerException — если новая предложенная цель равна null
WrongMethodTypeException — если тип метода новой предложенной цели отличается от типа метода предыдущей цели
См. также:
  • getTarget()

dynamicInvoker

public final MethodHandle dynamicInvoker()
Создаёт дескриптор метода, эквивалентный инструкции invokedynamic, связанной с этой точкой вызова.

Этот метод эквивалентен следующему коду:

MethodHandle getTarget, invoker, result;
getTarget = MethodHandles.publicLookup().bind(this, "getTarget", MethodType.methodType(MethodHandle.class));
invoker = MethodHandles.exactInvoker(this.type());
result = MethodHandles.foldArguments(invoker, getTarget)
Определён в:
dynamicInvoker в классе CallSite
Возвращает:
дескриптор метода, который всегда вызывает текущую цель этой точки вызова

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по 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