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
、クラス: CallSite
setTarget(java.lang.invoke.MethodHandle)
public void setTarget(MethodHandle newTarget)
メモリーとの相互作用は、volatile フィールドに書き込みを行う場合と同じです。具体的には、次回の getTarget
呼び出し時に更新後のターゲットを得られることが、すべてのスレッドで保証されます。
setTarget
、クラス: CallSite
newTarget
- 新しいターゲット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.