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
をチェーンに組み込むことなくスローすることによって解決されるため、同じ引数に対して繰り返しリンクする可能性があります。 -
コンストラクタのサマリー
-
メソッドのサマリー
修飾子と型メソッド説明protected int
チェーン内のメソッド・ハンドルの最大数。void
relink
(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke) このメソッドは、呼び出しサイトが再リンクされるたびに動的リンカーによって呼び出されます。(例外についてはRelinkableCallSite.resetAndRelink(GuardedInvocation, MethodHandle)
を参照してください)。void
resetAndRelink
(GuardedInvocation guardedInvocation, MethodHandle relinkAndInvoke) このメソッドは、コール・サイトが再リンクされるたびにダイナミック・リンカーによって呼び出され、リンカーはコール・サイトが以前のリンケージ・ステート(それはRelinkableCallSite.relink(GuardedInvocation, MethodHandle)
とどのように違うのですか?)を破棄することを望みます。クラスjdk.dynalink.support.AbstractRelinkableCallSiteで宣言されたメソッド
getDescriptor, initialize
クラス java.lang.invoke.MutableCallSiteで宣言されたメソッド
dynamicInvoker, getTarget, setTarget, syncAll
-
コンストラクタの詳細
-
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)
を呼び出して、最後にターゲットを呼び出すような方法です。
-