Класс VolatileCallSite
public class VolatileCallSite extends CallSite
VolatileCallSite — это CallSite, целевой метод которого ведет себя как переменная типа volatile. Инструкция invokedynamic, связанная с VolatileCallSite, немедленно видит обновления целевого метода вызова, даже если это обновление происходит в другом потоке. Такая тесная связь между потоками может привести к снижению производительности. В отличие от MutableCallSite, для volatile вызовов нет операции syncAll, поскольку каждое присваивание значению volatile переменной неявно синхронизируется с потоками-читателями.
Во всех остальных аспектах VolatileCallSite взаимозаменяем с MutableCallSite.
- Since:
- 1.7
- See Also:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
VolatileCallSite |
Создаёт вызов с volatile связью с целевым методом. |
VolatileCallSite |
Создаёт вызов с volatile связью с целевым методом. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
final MethodHandle |
dynamicInvoker() |
Возвращает метод-обработчик, эквивалентный инструкции invokedynamic, связанной с этим вызовом. |
final MethodHandle |
getTarget() |
Возвращает целевой метод вызова, который ведет себя как поле типа volatile класса VolatileCallSite. |
void |
setTarget |
Обновляет целевой метод этого вызова, как volatile переменную. |
Подробное описание конструкторов
VolatileCallSite
public VolatileCallSite(MethodType type)
IllegalStateException при вызове.- Parameters:
-
type- тип метода, который будет иметь этот вызов - Throws:
-
NullPointerException- если предложенный тип null
VolatileCallSite
public VolatileCallSite(MethodHandle target)
- Parameters:
-
target- метод-обработчик, который будет начальным целевым методом вызова - Throws:
-
NullPointerException- если предложенный целевой метод null
Подробное описание методов
getTarget
public final MethodHandle getTarget()
volatile класса VolatileCallSite. Взаимодействие с памятью getTarget аналогично чтению из поля типа volatile.
В частности, текущий поток должен выполнить новое чтение целевого метода из памяти и не должен пропустить недавнее обновление целевого метода другим потоком.
- Specified by:
-
getTargetin classCallSite - Returns:
- состояние связи этого вызова, метод-обработчик, который может изменяться со временем
- See Also:
setTarget
public void setTarget(MethodHandle newTarget)
Взаимодействие с памятью аналогично записи в volatile поле. В частности, любой поток гарантированно увидит обновленный целевой метод в следующий раз, когда он вызовет getTarget.
- Specified by:
-
setTargetin classCallSite - Parameters:
-
newTarget- новый целевой метод - Throws:
-
NullPointerException- если предложенный новый целевой метод null -
WrongMethodTypeException- если у предложенного нового целевого метода тип метода отличается от предыдущего - See Also:
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)
- Specified by:
-
dynamicInvokerin classCallSite - Returns:
- метод-обработчик, который всегда вызывает текущий целевой метод этого вызова
© 1993, 2021, 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/17/docs/api/java.base/java/lang/invoke/VolatileCallSite.html