モジュール jdk.incubator.foreign
パッケージ jdk.incubator.foreign

インタフェースLibraryLookup


public interface LibraryLookup
ネイティブ・ライブラリ・ルックアップ。 シンボルをルックアップするためのルックアップ演算を公開します。lookup(String)を参照してください。 特定のネイティブ・ライブラリは、それを参照しているliveライブラリ・ルックアップ・インスタンスが少なくとも1つあるかぎり、ロードされたままになります。 指定されたライブラリ・ルックアップ・オブジェクトによって生成されたすべてのシンボル・インスタンス(LibraryLookup.Symbolを参照してください)には、指定されたルックアップ・オブジェクトへの強い参照が含まれているため、ライブラリのアンロードが回避されます。したがって、CLinker.downcallHandle(Addressable, MethodType, FunctionDescriptor)から取得されたメソッド・ハンドル・インスタンスも、その構築に使用されるアドレス可能なパラメータへの強い参照を保持します。 これは、ネイティブ・メソッド・ハンドルからルックアップ・オブジェクト(メソッド・ハンドルが参照するネイティブ・ライブラリ・シンボルのルックアップに使用されたもの)への強い到達可能性チェーンが常に存在することを意味します。これは、ネイティブ・コールの途中でネイティブ・ライブラリがアンロードされる状況を防ぐのに役立ちます。

クライアントがルックアップ・シンボルからメモリー・セグメントを作成する場合、クライアントは、メモリー・セグメントが到達可能であるかぎりシンボルが到達可能になるように、新しく作成されたセグメントにルックアップ・シンボルをアタッチできます。これを行うには、次のようにMemoryAddress.asSegmentRestricted(long, Runnable, Object)制限付きセグメント・ファクトリを使用してセグメントを作成します:

LibraryLookup defaultLookup = LibraryLookup.defaultLookup();
LibraryLookup.Symbol errno = defaultLookup.lookup("errno");
MemorySegment errnoSegment = errno.address().asRestrictedSegment(4, errno);
 

ライブラリをアンロードできるようにするには、クライアントは、指定されたライブラリに関連付けられたルックアップ・オブジェクトに対して直接または間接的に保持している強い参照をすべて破棄する必要があります。

特に指定がないかぎり、null引数、またはこのクラスのメソッドに1つ以上のnull要素を含む配列引数を渡すと、NullPointerExceptionがスローされます。

  • ネストされたクラスのサマリー

    ネストされたクラス
    修飾子と型
    インタフェース
    説明
    static interface 
    ライブラリ・ルック・アップ中に取得されるシンボル。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    lookup​(String name)
    このライブラリ内の指定された名前のシンボルを検索します。
    デフォルトのライブラリ・ルックアップ・オブジェクトを取得します。
    ofLibrary​(String libName)
    指定されたライブラリ名で識別されるライブラリに対応するライブラリ・ルックアップ・オブジェクトを取得します。
    ofPath​(Path path)
    指定されたパスで識別されるライブラリに対応するライブラリ・ルックアップ・オブジェクトを取得します。
  • メソッドの詳細

    • lookup

      このライブラリ内の指定された名前のシンボルを検索します。 返されるシンボルは、このルックアップ・オブジェクトへの強い参照を維持します。
      パラメータ:
      name - シンボル名。
      戻り値:
      ライブラリ・シンボル(もしあれば)。
    • ofDefault

      static LibraryLookup ofDefault()
      デフォルトのライブラリ・ルックアップ・オブジェクトを取得します。
      戻り値:
      デフォルトのライブラリ・ルックアップ・オブジェクト。
    • ofPath

      static LibraryLookup ofPath(Path path)
      指定されたパスで識別されるライブラリに対応するライブラリ・ルックアップ・オブジェクトを取得します。
      パラメータ:
      path - ライブラリの絶対パス。
      戻り値:
      指定されたパスのライブラリ・ルックアップ・オブジェクト。
      例外:
      IllegalArgumentException - 指定されたパスが絶対パスに対応していない場合(!path.isAbsolute()の場合など)。
    • ofLibrary

      static LibraryLookup ofLibrary(String libName)
      指定されたライブラリ名で識別されるライブラリに対応するライブラリ・ルックアップ・オブジェクトを取得します。 ライブラリ名は、プラットフォーム規則(例: Linuxでは、libプレフィクスと.so拡張子が追加されます)に従って修飾され、結果の名前は標準のネイティブ・ライブラリ・パス(これは、java.library.pathプロパティを設定することでオーバーライドできます)で検索されます。
      パラメータ:
      libName - ライブラリ名。
      戻り値:
      指定されたライブラリ名のライブラリ・ルックアップ・オブジェクト。