モジュール java.base
パッケージ java.lang.foreign

インタフェースLinker.Option.CaptureCallState

すべてのスーパー・インタフェース:
Linker.OptionPREVIEW
含まれているインタフェース:
Linker.OptionPREVIEW

public static sealed interface Linker.Option.CaptureCallState extends Linker.OptionPREVIEW
CaptureCallStateは、JavaプラットフォームのプレビューAPIです。
プレビュー機能が有効な場合のみ、プログラムでCaptureCallStateを使用できます。
プレビュー機能は、今後のリリースで削除するか、Javaプラットフォームの永続機能にアップグレードすることができます。
ダウン・コール・メソッド・ハンドルに関連付けられた外部関数をコールした直後に実行状態の一部を保存するためのリンカー・オプション。実行時に上書きしたり、従来の方法で読み取ることができます。

実行状態は、ユーザーが提供したネイティブ・セグメントにダウン・コール・メソッド・ハンドルに書き込むことで、起動時のダウン・コール・メソッド・ハンドルによって取得されます。 このために、Linker.Option.captureCallState(String[])PREVIEWオプションにリンクされたダウン・コール・メソッド・ハンドルには、ターゲット・アドレスの直後に追加のMemorySegmentPREVIEWパラメータ、およびオプションのSegmentAllocatorPREVIEWパラメータが含まれます。 このパラメータは、取得された状態が書き込まれるネイティブ・セグメントを表します。

ネイティブ・セグメントには、ダウン・コール・ハンドルのリンクに使用される特定のCaptureCallStateインスタンスを含むレイアウト「関連」が必要です。

このネイティブ・セグメントから取得された状態を取得するには、CaptureCallStateインスタンスに関連付けられたlayoutからvarハンドルを構築します。

次の例は、このリンカー・オプションの使用を示しています:

MemorySegment targetAddress = ...
CaptureCallState ccs = Linker.Option.captureCallState("errno");
MethodHandle handle = Linker.nativeLinker().downcallHandle(targetAddress, FunctionDescriptor.ofVoid(), ccs);

VarHandle errnoHandle = ccs.layout().varHandle(PathElement.groupElement("errno"));
try (Arena arena = Arena.openConfined()) {
    MemorySegment capturedState = arena.allocate(ccs.layout());
    handle.invoke(capturedState);
    int errno = errnoHandle.get(capturedState);
    // use errno
}

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

    インタフェースjava.lang.foreign.Linker.OptionPREVIEWで宣言されたネストされたクラス/インタフェース

    Linker.Option.CaptureCallStatePREVIEW
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    このCapturedCallStateインスタンスにリンクされたダウン・コール・ハンドルに渡されるネイティブ・セグメントのレイアウトを表す構造体のレイアウトを返します。
    static Set<String>
    この実装で取得できる状態の名前を返します。
  • メソッドの詳細

    • layout

      このCapturedCallStateインスタンスにリンクされたダウン・コール・ハンドルに渡されるネイティブ・セグメントのレイアウトを表す構造体のレイアウトを返します。
      戻り値:
      このCapturedCallStateインスタンスにリンクされたダウン・コール・ハンドルに渡されるネイティブ・セグメントのレイアウトを表す構造体レイアウト
    • supported

      static Set<String> supported()
      この実装で取得できる状態の名前を返します。
      戻り値:
      この実装で取得できる状態の名前