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

クラスDynamicLinkerFactory



  • public final class DynamicLinkerFactory
    extends Object
    DynamicLinkerオブジェクトを作成するためのファクトリ・クラスです。 ダイナミック・リンカーはDynalinkの中心的なオブジェクトです。これらはいくつかのGuardingDynamicLinkerオブジェクトで構成され、コール・サイトとそれらのオブジェクトとの連携を調整します。 通常の動的リンカーは、ファクトリのユーザーによって明示的に事前作成され、setPrioritizedLinkers(List)で構成されたすべてのGuardingDynamicLinkerオブジェクトとautomatically discoveredオブジェクトで構成されたリンカーで、最後にsetFallbackLinkers(List)で構成されたオブジェクトです。この最後のカテゴリには通常BeansLinkerが含まれます。
    • コンストラクタの詳細

      • DynamicLinkerFactory

        public DynamicLinkerFactory​()
        デフォルトの構成で新しいダイナミック・リンカー・ファクトリを作成します。 作成時には、さまざまなsetXxx()メソッドを使用してファクトリを構成し、createLinker()を使用して現在の構成に従って1つ以上のダイナミック・リンカーを作成するために使用できます。
    • メソッドの詳細

      • setClassLoader

        public void setClassLoader​(ClassLoader classLoader)
        利用可能なガーディング・ダイナミック・リンカーを自動検出するためのクラス・ローダーを設定します。 このクラス・ローダーで使用できるGuardingDynamicLinkerExporter実装は、ServiceLoaderメカニズムを使用して自動的にインスタンス化され、それらが提供するリンカーは、このファクトリが作成するDynamicLinkerに組み込まれます。 これにより、ネイティブ・オブジェクトがこのランタイムに渡された場合に、自動的に検出されたランタイムからのリンカーによって、この言語ランタイムに属するコール・サイトをリンクできるクロス・ラン・ゲージの相互運用性が可能になります。 このメソッドを呼び出してクラス・ローダーが明示的に設定されていない場合、createLinker()を呼び出すスレッドのスレッド・コンテキスト・クラス・ローダーが使用されます。 このメソッドがnullで明示的に呼び出されると、ServiceLoader.loadInstalled(Class)がリンカーのロードに使用されます。
        パラメータ:
        classLoader - 使用可能なリンカーの自動検出に使用されるクラス・ローダー。
      • setPrioritizedLinkers

        public void setPrioritizedLinkers​(List<? extends GuardingDynamicLinker> prioritizedLinkers)
        優先されたガーディング・ダイナミック・リンカーを設定します。 Dynalinkを使用する言語ランタイムには、通常、自分の言語用に少なくとも1つのリンカーがあります。 これらのリンカーは、自動検出されたフォールバック・リンカーの前に、コール・サイトをリンクしているときに結果のダイナミック・リンカーによって最初に参照されます。 ファクトリが優先リンカーの1つと一致するリンカー・クラスも自動検出すると、自動発見されたクラスは無視され、明示的に優先順位付けされたインスタンスが使用されます。
        パラメータ:
        prioritizedLinkers - 優先リンカーのリスト。 nullも可。
        例外:
        NullPointerException - いずれかのリスト要素がnullの場合。
      • setPrioritizedLinkers

        public void setPrioritizedLinkers​(GuardingDynamicLinker... prioritizedLinkers)
        優先されたガーディング・ダイナミック・リンカーを設定します。 Arrays.asList(prioritizedLinkers)setPrioritizedLinkers(List)を呼び出すのと同じです。
        パラメータ:
        prioritizedLinkers - 優先順位付けされたリンカーの配列。 nullも可。
        例外:
        NullPointerException - いずれかの配列要素がnullの場合。
      • setPrioritizedLinker

        public void setPrioritizedLinker​(GuardingDynamicLinker prioritizedLinker)
        優先順位付けされた単一のリンカーを設定します。 setPrioritizedLinkers(List)を単一要素のリストで呼び出すのと同じです。
        パラメータ:
        prioritizedLinker - 単一の優先リンカー。 nullは不可。
        例外:
        NullPointerException - nullが渡された場合。
      • setFallbackLinkers

        public void setFallbackLinkers​(List<? extends GuardingDynamicLinker> fallbackLinkers)
        フォールバック・ガード・ダイナミック・リンカーを設定します。 これらのリンカーは、自動検出されたリンカーと優先順位付けされたリンカーの後で、コール・サイトをリンクするときに結果として生じるダイナミック・リンカーによって最後に参照されます。 ファクトリがフォールバック・リンカーの1つと一致するリンカー・クラスも自動検出すると、自動発見されたクラスは無視され、明示的フォールバック・インスタンスが使用されます。
        パラメータ:
        fallbackLinkers - フォールバック・リンカーのリスト。 呼び出し元がフォールバック・リンカーを設定しないことを示すために空にすることができます。 このメソッドが明示的に呼び出されない場合、またはnullが渡された場合、ファクトリはBeansLinkerのインスタンスを作成して、デフォルトのフォールバック・リンカーとして機能することに注意してください。
        例外:
        NullPointerException - いずれかのリスト要素がnullの場合。
      • setFallbackLinkers

        public void setFallbackLinkers​(GuardingDynamicLinker... fallbackLinkers)
        フォールバック・ガード・ダイナミック・リンカーを設定します。 Arrays.asList(fallbackLinkers)setFallbackLinkers(List)を呼び出すのと同じです。
        パラメータ:
        fallbackLinkers - フォールバック・リンカーの配列。 呼び出し元がフォールバック・リンカーを設定しないことを示すために空にすることができます。 このメソッドが明示的に呼び出されない場合、またはnullが渡された場合、ファクトリはBeansLinkerのインスタンスを作成して、デフォルトのフォールバック・リンカーとして機能することに注意してください。
        例外:
        NullPointerException - いずれかの配列要素がnullの場合。
      • setSyncOnRelink

        public void setSyncOnRelink​(boolean syncOnRelink)
        コール・サイトが再リンクされた後、このファクトリによって作成されたダイナミック・リンカーがMutableCallSite.syncAll(MutableCallSite[])を呼び出すかどうかを設定します。 デフォルトはfalseです。 ランタイムが動的にリンクされたコードのマルチスレッド実行をサポートしている場合は、おそらくそれをtrueに設定することをお勧めします。
        パラメータ:
        syncOnRelink - 再リンク時にsyncを呼び出す場合はtrue、そうでない場合はfalse。
      • setUnstableRelinkThreshold

        public void setUnstableRelinkThreshold​(int unstableRelinkThreshold)
        不安定な再リンクのしきい値を設定します; コール・サイトが再リンクされた後に不安定と見なされる回数、それに続くリンク・リクエストがこれを示します。 明示的に設定されていない場合のデフォルト値は8です。
        パラメータ:
        unstableRelinkThreshold - 新しいしきい値。 0未満であってはならない。 ゼロの値は、コール・サイトが決して不安定であるとはみなされないことを意味します。
        関連項目:
        LinkRequest.isCallSiteUnstable()
      • setPrelinkTransformer

        public void setPrelinkTransformer​(GuardedInvocationTransformer prelinkTransformer)
        リンク前変圧器を設定します。 これは、コンポーネント・リンカーによって作成された後、ダイナミック・リンカーがコール・サイトにリンクする前に、保護された呼び出しを変更する最後のチャンスを得るGuardedInvocationTransformerです。 呼び出しの戻り値の型を呼び出しサイトの型に適合させるために通常使用されます。 明示的に設定されていない場合は、単にGuardedInvocation.asType(LinkerServices, MethodType)を呼び出す既定のプリリンク・トランスフォーマが使用されます。 カスタマイズされたプリリンク・トランスフォーマはほとんど必要ありません。コード解読戦略などの高度な技術を実装するためのビルディング・ブロックとして使用されています。
        パラメータ:
        prelinkTransformer - ダイナミック・リンカー用のプリリンク・トランスです。 ファクトリにデフォルトのトランスフォーマを使用させる場合は、nullにすることができます。
      • setAutoConversionStrategy

        public void setAutoConversionStrategy​(MethodTypeConversionStrategy autoConversionStrategy)
        自動型変換の変換方法を表すオブジェクトを設定します。 LinkerServices.asType(MethodHandle, MethodType)がすべてのカスタム変換をメソッド・ハンドルに適用した後も、MethodHandle.asType(MethodType)のように通常自動的に適用できるmethod invocation conversionsを適用する必要があります。 ただし、言語ランタイムは、独自の通話サイトのコン・バージョンまでカスタマイズすることもあります。 典型的な例では、ヌルの戻り値をアンボックスすることができます。これは、通常はMethodHandles.asType()で禁止されています。 この場合、言語ランタイムはヌル値を処理できる独自のカスタム自動変換戦略をインストールできます。 ストラテジMethodTypeConversionStrategy.asType(MethodHandle, MethodType)が呼び出されると、カスタム言語変換がすでにメソッド・ハンドルに適用されていることに注意してください。設計上、ハンドル現在のメソッド型と希望する最終型の違いは、常にメソッドの対象となるものだけです呼び出し変換。 この戦略では、最終ステップとして内部的に実行される最終的なMethodHandle.asType()も呼び出す必要はありません。
        パラメータ:
        autoConversionStrategy - このファクトリによって作成されたリンカーのメソッド呼び出し変換を適用するための戦略。 カスタム戦略がない場合はnullになります。
      • setInternalObjectsFilter

        public void setInternalObjectsFilter​(MethodHandleTransformer internalObjectsFilter)
        このファクトリで作成されたダイナミック・リンカーのリンカー・サービス用のLinkerServices.filterInternalObjects(MethodHandle)の実装として動作するはずのメソッド・ハンドル・トランスフォーマを設定します。 言語ランタイムの中には、スコープをエスケープしてはならない内部オブジェクトを持つものがあります。 ここではメソッド・ハンドルを変更するトランスフォーマを追加して、潜在的に内部言語ランタイム・オブジェクトを受け取るパラメータにフィルタを追加して、潜在的にそれらをラップすることによってエスケープしないようにすることができます。 トランスフォーマは、アン・ラッピング・フィルタを戻り値に追加する可能性もあります。 DefaultInternalObjectFilterは、そのようなフィルタリング・トランスフォーマを簡単に作成するための便利なクラスとして提供されています。
        パラメータ:
        internalObjectsFilter - 内部オブジェクトをフィルタリングするメソッド・ハンドル・トランスフォーマ、またはnull。
      • createLinker

        public DynamicLinker createLinker​()
        現在の構成に基づいて新しい動的リンカーを作成します。 このメソッドを複数回呼び出すと、複数の動的リンカーを作成できます。 このメソッドを呼び出すたびに自動的に発見されたリンカーが新たにインスタンス化されます。 呼び出し間でファクトリ構成を変更することは許可されています。 このメソッドはスレッド・セーフではありません。 呼び出し後、呼び出し側はgetAutoLoadingErrors()を呼び出して、自動的に検出されたリンカーをロードしようとしている間に発生したServiceConfigurationErrorのリストを取り出すことができます。 これらは、このメソッドの呼び出しからスローされることはありません。なぜなら、それらのメソッドから回復し、失敗したリンカーを無視するためにあらゆる努力をしているからです。
        戻り値:
        新しいダイナミック・リンカー