モジュール jdk.dynalink
パッケージ jdk.dynalink

インタフェースRelinkableCallSite

  • 既知のすべての実装クラス:
    AbstractRelinkableCallSite, ChainedCallSite, SimpleRelinkableCallSite

    public interface RelinkableCallSite
    DynamicLinkerによって管理されるコール・サイトのインタフェース。 Dynalinkのユーザーは、このインタフェースをコール・サイトの実装として実装するCallSiteのサブクラスを使用する必要があります。 単相インライン・キャッシング戦略を実装し、以前にリンクされたメソッド・ハンドルのチェーンを保持するChainedCallSiteに加えて、単相インライン・キャッシング戦略を実装する、すぐに使用できるSimpleRelinkableCallSiteサブクラスがあります。 再リンク可能なコール・サイトは、DynamicLinker.link(RelinkableCallSite)メソッドを使用して関連付けた後、DynamicLinkerオブジェクトによって管理されます。
    • メソッドの詳細

      • initialize

        void initialize​(MethodHandle relinkAndInvoke)
        動的リンカーによって呼び出され、再リンクおよび呼び出しメソッドハンドルを設定することによって、再リンク可能な呼び出しサイトを初期化します。 コール・サイト実装では、CallSite.setTarget(MethodHandle)を使用して、このメソッド・ハンドルをターゲットとして設定する必要があります。 再リンク・アンド・インボークは、DynamicLinker.link(RelinkableCallSite)によって設定された初期メソッド・ハンドルで、その引数に基づく最初の呼出し時にコール・サイトが適切なターゲットに再リンクされ、そのリンクされたターゲットが(したがって)呼び出されます。 このリンクプロトコルは、呼び出しサイトが実際の引数で呼び出されるまでリンクを効果的に遅延させるため、リンカーは呼び出しサイトの静的メソッド型だけでなく、これらの引数に基づいて微妙なリンク決定を行うことができます。
        パラメータ:
        relinkAndInvoke - Dynalinkによって提供される再リンク・アンド・インボーク・メソッド・ハンドル。
      • getDescriptor

        CallSiteDescriptor getDescriptor()
        このコール・サイトの記述子を返します。
        戻り値:
        このコール・サイトの記述子。
      • relink

        void relink​(GuardedInvocation guardedInvocation,
                    MethodHandle relinkAndInvoke)
        このメソッドは、コール・サイトが再リンクされるたびに動的リンカーによってコールされます(ただし、例外についてはresetAndRelink(GuardedInvocation, MethodHandle)を参照してください)。 コール・サイトがそのターゲット・メソッド・ハンドルに組み込む必要があるGuardedInvocationが渡されます。 このメソッドがコールされると、コール・サイトでは、多相インライン・キャッシュの実装のために他の非検証呼出しを保持し、この呼出しでそれらを構成して最終的なターゲットを形成できます。
        パラメータ:
        guardedInvocation - コール・サイトがそのターゲット・メソッド・ハンドルに組み込む必要がある、ガード付き呼出し。
        relinkAndInvoke - 再リンク・アンド・インボークのメソッド・ハンドル。 これは、DynamicLinkerによってコールバックとして提供されるコール・サイトのメソッド・タイプと一致するメソッド・ハンドルです。 渡された引数でターゲットを呼び出すことができない場合、このコール・サイトが最終的なフォールバックとして使用する必要があります。 フォールバック・メソッドは、起動時に適切なターゲットGuardedInvocationを取得して、その後relink(GuardedInvocation, MethodHandle)またはresetAndRelink(GuardedInvocation, MethodHandle)を起動し、最後にターゲットを起動するようにします。
      • resetAndRelink

        void resetAndRelink​(GuardedInvocation guardedInvocation,
                            MethodHandle relinkAndInvoke)
        このメソッドは、コールサイトが再リンクされるたびに動的リンカーによって呼び出され、かつリンカーが、以前のリンク状態(つまり、relink(GuardedInvocation, MethodHandle)と異なる)を破棄するようコールサイトに要求します。 コール・サイトが新しいターゲット・メソッド・ハンドルの構築に使用するGuardedInvocationが渡されます。 このメソッドが呼び出されると、コール・サイトは以前の状態を保持しないことを推奨し、現在の呼出しのみをリンクすることになっています。
        パラメータ:
        guardedInvocation - コール・サイトがターゲット・メソッド・ハンドルの構築に使用するガード付き呼出し。
        relinkAndInvoke - 再リンク・アンド・インボークのメソッド・ハンドル。 これは、DynamicLinkerによってコールバックとして提供されるコール・サイトのメソッド・タイプと一致するメソッド・ハンドルです。 渡された引数でターゲットを呼び出すことができない場合、このコール・サイトが最終的なフォールバックとして使用する必要があります。 フォールバック・メソッドは、起動時に適切なターゲットGuardedInvocationを取得して、その後relink(GuardedInvocation, MethodHandle)またはresetAndRelink(GuardedInvocation, MethodHandle)を起動し、最後にターゲットを起動するようにします。