クラスChainedCallSite
java.lang.Object
java.lang.invoke.CallSite
java.lang.invoke.MutableCallSite
jdk.dynalink.support.AbstractRelinkableCallSite
jdk.dynalink.support.ChainedCallSite
- すべての実装されたインタフェース:
RelinkableCallSite
public class ChainedCallSite extends AbstractRelinkableCallSite
多相インライン・キャッシング戦略を実装する再リンク可能なコール・サイト。 リンクされた最大8個の
GuardedInvocationを記憶し、各再リンク・リクエストで、次の呼出しにフォールバックする1つの呼出しのメソッド・ハンドルのカスケード・チェーンを構築します。 記憶されている呼出しの数は、サブクラスのgetMaxChainLength()をオーバーライドすることでカスタマイズできます。 このコール・サイトが新しい呼出しで再リンクされ、チェーンの長さがすでに最大である場合、最も古い呼出しは破棄されます。 無効化されたスイッチ・ポイントを持つ呼出しと、その無効化された例外がトリガーされた呼出しは、チェーンから即時削除されます。 呼出しの順序は変更されません。最後にリンクされたメソッド・ハンドルは常にチェーンの先頭にあり、最後にリンクされた最も新しいメソッド・ハンドルです。 コール・サイトは、複数のスレッドで同時に安全に再リンクできます。 リンクの競合状態は、チェーンに組み込むことなく、失われたスレッドで生成されたGuardedInvocationをスローすることで解決されるため、同じ引数のリンクが繰り返される可能性があります。 - 導入されたバージョン:
- 9
-
コンストラクタのサマリー
コンストラクタ -
メソッドのサマリー
修飾子と型メソッド説明protected intチェーン内のメソッド・ハンドルの最大数。voidrelink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke) このメソッドは、呼び出しサイトが再リンクされるたびに動的リンカーによって呼び出されます。(例外についてはRelinkableCallSite.resetAndRelink(GuardedInvocation, MethodHandle)を参照してください)。voidresetAndRelink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke) このメソッドは、コール・サイトが再リンクされるたびにダイナミック・リンカーによって呼び出され、リンカーはコール・サイトが以前のリンケージ・ステート(それはRelinkableCallSite.relink(GuardedInvocation, MethodHandle)とどのように違うのですか?)を破棄することを望みます。クラスで宣言されたメソッド AbstractRelinkableCallSite
getDescriptor, initialize修飾子と型メソッド説明このコール・サイトの記述子を返します。voidinitialize(MethodHandle relinkAndInvoke) 再リンクおよび呼出しメソッド・ハンドルを設定して、再リンク可能コール・サイトを初期化するために動的リンカーによって呼び出されます。クラスで宣言されたメソッド MutableCallSite
dynamicInvoker, getTarget, setTarget, syncAll修飾子と型メソッド説明final MethodHandleこのコール・サイトにリンクされているinvokedynamic命令と同等のメソッド・ハンドルを生成します。final MethodHandleコール・サイトのターゲット・メソッドを返しますが、これは、MutableCallSiteの通常のフィールドのように振る舞います。voidsetTarget(MethodHandle newTarget) このコール・サイトのターゲット・メソッドを通常の変数として更新します。static voidsyncAll(MutableCallSite[] sites) 指定された配列内のコール・サイトごとに同期処理を実行しますが、その際、いずれかのコール・サイトのターゲットから以前にロードされたキャッシュ値をすべて破棄することを、ほかのすべてのスレッドに対して強制します。クラスオブジェクトで宣言されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait修飾子と型メソッド説明protected Objectclone()このオブジェクトのコピーを作成して、返します。booleanこのオブジェクトと他のオブジェクトが等しいかどうかを示します。protected voidfinalize()削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。最終決定は非推奨であり、将来のリリースで削除される可能性があります。final Class<?> getClass()このObjectの実行時クラスを返します。inthashCode()このオブジェクトに対するハッシュ・コード値を返します。final voidnotify()このオブジェクトのモニターで待機中のスレッドを1つ再開します。final voidこのオブジェクトのモニターで待機中のすべてのスレッドを再開します。toString()オブジェクトの文字列表現を返します。final voidwait()現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。final voidwait(long timeoutMillis) 現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。final voidwait(long timeoutMillis, int nanos) 現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
-
コンストラクタの詳細
-
ChainedCallSite
public ChainedCallSite(CallSiteDescriptor descriptor) 新しいチェーン・コール・サイトを作成します。- パラメータ:
descriptor- コール・サイトの記述子。
-
-
メソッドの詳細
-
getMaxChainLength
protected int getMaxChainLength()チェーン内のメソッド・ハンドルの最大数。 デフォルトは8です。 値を変更する必要がある場合は、サブクラスで上書きできます。- 戻り値:
- チェーン内のメソッド・ハンドルの最大数。 戻り値がチェックされ、オーバーライドが1未満の値を返す場合は、
RuntimeExceptionがスローされます。
-
relink
public void relink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke) インタフェース:RelinkableCallSiteからコピーされた説明このメソッドは、呼び出しサイトが再リンクされるたびに動的リンカーによって呼び出されます。(例外についてはRelinkableCallSite.resetAndRelink(GuardedInvocation, MethodHandle)を参照してください)。 コール・サイトがターゲット・メソッド・ハンドルに組み込む必要があるGuardedInvocationが渡されます。 このメソッドが呼び出されると、コール・サイトは、多相インライン・キャッシュの実装のために他の非検証呼出しを保持し、それらをこの呼出しで構成して最終ターゲットを形成できます。- パラメータ:
guardedInvocation- コール・サイトがターゲット・メソッド・ハンドルに組み込む必要があるガード付き呼出し。relinkAndInvoke- 再リンクおよび呼出しメソッド・ハンドル。 これは、DynamicLinkerによってコールバックとして提供されるコール・サイトのメソッド・タイプと一致するメソッド・ハンドルです。 このコール・サイトでは、渡された引数でターゲットを起動できない場合、最終的なフォールバックとして使用する必要があります。 フォールバック・メソッドは、コール時に、その呼出しに対して適切なターゲットGuardedInvocationを取得し、その後RelinkableCallSite.relink(GuardedInvocation, MethodHandle)またはRelinkableCallSite.resetAndRelink(GuardedInvocation, MethodHandle)を起動し、最後にターゲットを起動するようなものです。
-
resetAndRelink
public void resetAndRelink(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke) インタフェース:RelinkableCallSiteからコピーされた説明このメソッドは、コール・サイトが再リンクされるたびにダイナミック・リンカーによって呼び出され、リンカーはコール・サイトが以前のリンケージ・ステート(それはRelinkableCallSite.relink(GuardedInvocation, MethodHandle)とどのように違うのですか?)を破棄することを望みます。 コール・サイトが新しいターゲット・メソッド・ハンドルの構築に使用するGuardedInvocationが渡されます。 このメソッドが呼び出されると、コール・サイトは以前の状態を保持しないことを推奨され、現在の呼出しのみをリンクします。- パラメータ:
guardedInvocation- コール・サイトがターゲット・メソッド・ハンドルの構築に使用するガード付き呼出し。relinkAndInvoke- 再リンクおよび呼出しメソッド・ハンドル。 これは、DynamicLinkerによってコールバックとして提供されるコール・サイトのメソッド・タイプと一致するメソッド・ハンドルです。 このコール・サイトでは、渡された引数でターゲットを起動できない場合、最終的なフォールバックとして使用する必要があります。 フォールバック・メソッドは、コール時に、その呼出しに対して適切なターゲットGuardedInvocationを取得し、その後RelinkableCallSite.relink(GuardedInvocation, MethodHandle)またはRelinkableCallSite.resetAndRelink(GuardedInvocation, MethodHandle)を起動し、最後にターゲットを起動するようなものです。
-