モジュール 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 - 新しいしきい値。 ゼロより小さくすることはできません。 ゼロの値は、コールサイトが不安定とみなされないことを意味します。
        関連項目:
        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()ではデフォルトで禁止されているnull戻り値のボックス化解除を許可することです。 この場合、言語ランタイムは、NULL値を処理できる独自のカスタム自動変換戦略をインストールできます。 戦略の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のリストを取得できます。 これらは、このメソッドの呼出しからスローされることはありません。これらのメソッドからリカバリし、失敗したリンカーを無視するためです。
        戻り値:
        新しいダイナミックリンカー