Класс VolatileCallSite
public non-sealed class VolatileCallSite extends CallSite
VolatileCallSite — это CallSite, цель которого действует как volatile-переменная. Инструкция invokedynamic, связанная с VolatileCallSite, немедленно видит обновления цели своего сайта вызова, даже если обновление происходит в другом потоке. Такая тесная связь между потоками может привести к снижению производительности. В отличие от MutableCallSite, у volatile-сайтов вызова нет операции syncAll, поскольку каждая запись в volatile-переменную неявно синхронизируется с потоками-читателями.
В остальном VolatileCallSite взаимозаменяем с MutableCallSite.
- Начиная с:
- 1.7
- См. также:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
VolatileCallSite |
Создает сайт вызова с volatile-привязкой к его цели. |
VolatileCallSite |
Создает сайт вызова с volatile-привязкой к его цели. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
final MethodHandle |
dynamicInvoker() |
Создает дескриптор метода, эквивалентный инструкции invokedynamic, связанной с этим сайтом вызова. |
final MethodHandle |
getTarget() |
Возвращает целевой метод сайта вызова, который ведет себя как поле volatile объекта VolatileCallSite. |
void |
setTarget |
Обновляет целевой метод этого сайта вызова как volatile-переменную. |
Подробное описание конструкторов
VolatileCallSite
public VolatileCallSite(MethodType type)
IllegalStateException.- Параметры:
-
type— тип метода, который будет иметь этот сайт вызова - Выбрасывает:
-
NullPointerException— если указанный тип равен null
VolatileCallSite
public VolatileCallSite(MethodHandle target)
- Параметры:
-
target— дескриптор метода, который станет начальной целью сайта вызова - Выбрасывает:
-
NullPointerException— если указанная цель равна null
Подробное описание методов
getTarget
public final MethodHandle getTarget()
volatile объекта VolatileCallSite. Взаимодействие getTarget с памятью такое же, как при чтении поля volatile.
В частности, текущий поток должен выполнить новое чтение цели из памяти и не должен пропустить недавнее обновление цели, выполненное другим потоком.
setTarget
public void setTarget(MethodHandle newTarget)
Взаимодействие с памятью такое же, как при записи в volatile-поле. В частности, гарантируется, что все потоки увидят обновленную цель при следующем вызове getTarget.
- Определено в:
-
setTargetв классеCallSite - Параметры:
-
newTarget— новая цель - Выбрасывает:
-
NullPointerException— если указанная новая цель равна null -
WrongMethodTypeException— если тип метода указанной новой цели отличается от типа предыдущей цели - См. также:
dynamicInvoker
public final MethodHandle dynamicInvoker()
Этот метод эквивалентен следующему коду:
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 - Возвращает:
- дескриптор метода, который всегда вызывает текущую цель этого сайта вызова
© 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