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 LibraryLookup
デフォルトのライブラリ・ルックアップ・オブジェクトを取得します。static LibraryLookup
指定されたライブラリ名で識別されるライブラリに対応するライブラリ・ルックアップ・オブジェクトを取得します。static LibraryLookup
指定されたパスで識別されるライブラリに対応するライブラリ・ルックアップ・オブジェクトを取得します。
-
メソッドの詳細
-
lookup
Optional<LibraryLookup.Symbol> lookup(String name)このライブラリ内の指定された名前のシンボルを検索します。 返されるシンボルは、このルックアップ・オブジェクトへの強い参照を維持します。- パラメータ:
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
- ライブラリ名。- 戻り値:
- 指定されたライブラリ名のライブラリ・ルックアップ・オブジェクト。
-