VolatileCallSite is a CallSite whose target acts like a volatile variable.
An invokedynamic instruction linked to a VolatileCallSite sees updates
to its call site target immediately, even if the update occurs in another thread.
There may be a performance penalty for such tight coupling between threads.
Unlike MutableCallSite, there is no
syncAll operation on volatile
call sites, since every write to a volatile variable is implicitly
synchronized with reader threads.
In other respects, a VolatileCallSite is interchangeable
with MutableCallSite.
MutableCallSite
| Access | Constructor and Description |
|---|---|
| public | VolatileCallSite(MethodType
the method type that this call site will have type)Creates a call site with a volatile binding to its target. |
| public | VolatileCallSite(MethodHandle
the method handle that will be the initial target of the call site target)Creates a call site with a volatile binding to its target. |
| Modifier and Type | Method and Description |
|---|---|
| public final MethodHandle | dynamicInvoker()
Implements abstract java. Produces a method handle equivalent to an invokedynamic instruction which has been linked to this call site. |
| public final MethodHandle | Returns: the linkage state of this call site, a method handle which can change over timeImplements abstract java. Returns the target method of the call site, which behaves
like a |
| public void | setTarget(MethodHandle
the new target newTarget)Implements abstract java. Updates the target method of this call site, as a volatile variable. |
| VolatileCallSite | back to summary |
|---|---|
| public VolatileCallSite(MethodType type) Creates a call site with a volatile binding to its target.
The initial target is set to a method handle
of the given type which will throw an
| |
| VolatileCallSite | back to summary |
|---|---|
| public VolatileCallSite(MethodHandle target) Creates a call site with a volatile binding to its target. The target is set to the given value.
| |
| dynamicInvoker | back to summary |
|---|---|
| public final MethodHandle dynamicInvoker() Implements abstract java. Doc from java. Produces a method handle equivalent to an invokedynamic instruction which has been linked to this call site. This method is equivalent to the following code:
| |
| getTarget | back to summary |
|---|---|
| public final MethodHandle getTarget() Implements abstract java. Returns the target method of the call site, which behaves
like a
The interactions of In particular, the current thread is required to issue a fresh read of the target from memory, and must not fail to see a recent update to the target by another thread.
| |
| setTarget | back to summary |
|---|---|
| public void setTarget(MethodHandle newTarget) Implements abstract java. Updates the target method of this call site, as a volatile variable. The type of the new target must agree with the type of the old target.
The interactions with memory are the same as of a write to a volatile field.
In particular, any threads is guaranteed to see the updated target
the next time it calls
| |