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, 2014, Oracle and/or its affiliates. All rights reserved.