Spec-Zone .ru
спецификации, руководства, описания, API
|
public class VolatileCallSite extends CallSite
VolatileCallSite
a CallSite
чья цель действует как энергозависимая переменная. invokedynamic
инструкция, соединенная с a VolatileCallSite
видит обновления к его цели сайта вызова сразу, даже если обновление происходит в другом потоке. Может быть потеря производительности для такой жесткой связи между потоками. В отличие от этого MutableCallSite
, на энергозависимых сайтах вызова нет никакой syncAll работы, так как каждая запись к энергозависимой переменной неявно синхронизируется с потоками читателя.
В других отношениях, a VolatileCallSite
является взаимозаменяемым MutableCallSite
.
MutableCallSite
Конструктор и Описание |
---|
VolatileCallSite(MethodHandle target)
Создает сайт вызова с энергозависимой привязкой с ее целью.
|
VolatileCallSite(MethodType type)
Создает сайт вызова с энергозависимой привязкой с ее целью.
|
Модификатор и Тип | Метод и Описание |
---|---|
MethodHandle |
dynamicInvoker()
Производит дескриптор метода, эквивалентный invokedynamic инструкции, которая была соединена с этим сайтом вызова.
|
MethodHandle |
getTarget()
Возвращает целевой метод сайта вызова, который ведет себя как a
volatile поле VolatileCallSite . |
void |
setTarget(MethodHandle newTarget)
Обновляет целевой метод этого сайта вызова, как энергозависимая переменная.
|
public VolatileCallSite(MethodType type)
IllegalStateException
если вызвано.type
- тип метода, который будет иметь этот сайт вызоваNullPointerException
- если предложенный тип является нулемpublic VolatileCallSite(MethodHandle target)
target
- дескриптор метода, который будет начальной целью сайта вызоваNullPointerException
- если предложенная цель является нулемpublic final MethodHandle getTarget()
volatile
поле VolatileCallSite
. Взаимодействия getTarget
с памятью то же самое с чтения от a volatile
поле.
В частности текущий поток обязан выпускать новое чтение цели из памяти, и не должен быть не в состоянии видеть недавнее обновление к цели другим потоком.
getTarget
в классе CallSite
setTarget(java.lang.invoke.MethodHandle)
public void setTarget(MethodHandle newTarget)
Взаимодействия с памятью являются тем же самым с записи к энергозависимому полю. В частности любые потоки, как гарантируют, будет видеть обновленную цель в следующий раз, когда она вызывает getTarget
.
setTarget
в классе CallSite
newTarget
- новая цельNullPointerException
- если предложенная новая цель является нулемWrongMethodTypeException
- если у предложенной новой цели есть тип метода, который отличается от предыдущей целиgetTarget()
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
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.