Spec-Zone.ru › OpenJDK 25

Класс 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()
Возвращает целевой метод сайта вызова, который ведет себя как поле volatile объекта VolatileCallSite.
void setTarget(MethodHandle newTarget)
Обновляет целевой метод этого сайта вызова как volatile-переменную.

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

type

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

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

VolatileCallSite

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

VolatileCallSite

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

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

getTarget

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

Взаимодействие 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, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/lang/invoke/VolatileCallSite.html

Spec-Zone.ru

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