public class VolatileCallSite extends CallSite
VolatileCallSite は、ターゲットの動作が volatile 変数と同じであるような CallSite です。VolatileCallSite にリンクされた invokedynamic 命令は、そのコールサイトターゲットへの更新が別のスレッドで発生した場合でも、その更新を即時に認識します。そうしたスレッド間の緊密な結合のため、パフォーマンス低下が発生する可能性があります。
 
揮発性コールサイトでは MutableCallSite と違って syncAll 操作が存在しませんが、これは、volatile 変数への書き込みがすべてリーダースレッドに暗黙的に同期されるからです。
 
その他の点では、VolatileCallSite は MutableCallSite と交換可能です。
MutableCallSite| コンストラクタと説明 | 
|---|
| VolatileCallSite(MethodHandle target)ターゲットへの volatile バインディングを持つコールサイトを作成します。 | 
| VolatileCallSite(MethodType type)ターゲットへの volatile バインディングを持つコールサイトを作成します。 | 
| 修飾子と型 | メソッドと説明 | 
|---|---|
| MethodHandle | dynamicInvoker()このコールサイトにリンクされている invokedynamic 命令と同等のメソッドハンドルを生成します。 | 
| MethodHandle | getTarget()コールサイトのターゲットメソッドを返しますが、これは、 VolatileCallSiteのvolatileフィールドのように振る舞います。 | 
| void | setTarget(MethodHandle newTarget)このコールサイトのターゲットメソッドを volatile 変数として更新します。 | 
public VolatileCallSite(MethodType type)
IllegalStateException をスローするような、指定された型のメソッドハンドルに設定されます。type - このコールサイトのメソッド型NullPointerException - 提案された型が null の場合public VolatileCallSite(MethodHandle target)
target - コールサイトの初期ターゲットとなるメソッドハンドルNullPointerException - 提案されたターゲットが null の場合public final MethodHandle getTarget()
VolatileCallSite の volatile フィールドのように振る舞います。
 
getTarget のメモリーとの相互作用は、volatile フィールドから読み取りを行う場合と同じです。
 
特に、現在のスレッドはメモリーからのターゲットの新しい読み取りを発行する必要があり、別のスレッドによるターゲットへの最新の更新を確認する必要があります。
getTarget、クラス: CallSitesetTarget(java.lang.invoke.MethodHandle)public void setTarget(MethodHandle newTarget)
メモリーとの相互作用は、volatile フィールドに書き込みを行う場合と同じです。具体的には、次回の getTarget 呼び出し時に更新後のターゲットを得られることが、すべてのスレッドで保証されます。
setTarget、クラス: CallSitenewTarget - 新しいターゲットNullPointerException - 提案された新しいターゲットが null の場合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 リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.