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

インタフェースMemoryAddress


public interface MemoryAddress
メモリー・アドレスは、指定のMemorySegment内のオフセットをエンコードします。 一般にメモリー・アドレスはMemorySegment.baseAddress()メソッドを使用して取得され、そのようなアドレスはaddOffset(long)を使用して必要に応じて調整できます。

メモリー・アドレスは、一般に、メモリー・アクセス変数ハンドル・コールで最初の引数として使用され、基礎となるメモリー・セグメントに対する処理を実行します。 メモリー・アドレスは常にメモリー・セグメントと関連付けられているため、このようなアクセス操作は、アドレス所有メモリー・リージョンによって実施される空間チェックおよび一時的チェックの対象となります。

このインタフェースのすべての実装はvalue-basedである必要があります。MemoryAddressのインスタンスでアイデンティティに依存する操作(参照の等価性の(==)、アイデンティティ・ハッシュ・コード、同期化など)を使用すると、予期しない結果が生じる可能性があるため、使用しないでください。 比較する場合は、equalsメソッドを使用することをお薦めします。

非プラットフォーム・クラスは、MemoryAddressを直接実装することはできません。

APIのノート:
将来、Java言語で許可される場合、MemoryAddresssealedインタフェースになる可能性があり、明示的に許可されているタイプ以外はサブクラス化できなくなります。
実装要件:
このインタフェースの実装は、不変でスレッド・セーフです。
  • メソッドのサマリー

    修飾子と型 メソッド 説明
    MemoryAddress addOffset​(long offset)
    指定されたオフセット(バイト単位)を使用して、現在のメモリー・アドレスから新しいメモリー・アドレスを生成します(負の場合もあります)。
    static void copy​(MemoryAddress src, MemoryAddress dst, long bytes)
    ソース・アドレスからターゲット・アドレスへのバルク・コピーを実行します。
    boolean equals​(Object that)
    指定されたオブジェクトをこのアドレスと比較し、等価性を維持します。
    int hashCode()
    この住所のハッシュ・コード値を返します。
    long offset()
    配下のセグメントに対するこのメモリー・アドレスのオフセット。
    MemorySegment segment()
    このアドレスが所属するメモリー・セグメント。
  • メソッドの詳細

    • addOffset

      MemoryAddress addOffset​(long offset)
      指定されたオフセット(バイト単位)を使用して、現在のメモリー・アドレスから新しいメモリー・アドレスを生成します(負の場合もあります)。
      パラメータ:
      offset - 新しいアドレスの作成に使用する必要がある、このアドレスを基準とした相対位置のオフセット(バイト単位)を指定します。
      戻り値:
      現在のメモリー・アドレスからのオフセットが指定された新しいメモリー・アドレス。
    • offset

      long offset()
      配下のセグメントに対するこのメモリー・アドレスのオフセット。
      戻り値:
      オフセット
    • segment

      MemorySegment segment()
      このアドレスが所属するメモリー・セグメント。
      戻り値:
      このアドレスが所属するメモリー・セグメント。
    • equals

      boolean equals​(Object that)
      指定されたオブジェクトをこのアドレスと比較し、等価性を維持します。 指定されたオブジェクトもアドレスの場合のみ、trueを返し、このアドレスと同じメモリー・ロケーションを参照します。
      オーバーライド:
      equals 、クラス:  Object
      APIのノート:
      2つのアドレスは、それらに関連付けられたセグメントが異なるにもかかわらず、同等であるとみなされる可能性があります。 たとえば、ある住所に関連付けられているセグメントが、他の住所に関連付けられているセグメントのslice (MemorySegment.asSlice(long, long)を参照してください)である場合に、これが発生することがあります。 さらに、2つのアドレスが、対応するセグメント(これは、たとえばMemorySegment.acquire()のコールの結果として可能です。)に関連付けられた時間的境界では差異にかかわらず、同等であるとみなされる可能性があります。
      パラメータ:
      that - このアドレスと等価性を持たせるために比較するオブジェクト。
      戻り値:
      指定されたオブジェクトがこのアドレスと等しい場合、true
      関連項目:
      Object.hashCode()HashMap
    • hashCode

      int hashCode()
      この住所のハッシュ・コード値を返します。
      オーバーライド:
      hashCode 、クラス:  Object
      戻り値:
      この住所のハッシュ・コード値。
      関連項目:
      Object.equals(java.lang.Object), System.identityHashCode(java.lang.Object)
    • copy

      static void copy​(MemoryAddress src, MemoryAddress dst, long bytes)
      ソース・アドレスからターゲット・アドレスへのバルク・コピーを実行します。 具体的には、src through src.addOffset(bytes - 1)に含まれるアドレスのバイト数が、dst through dst.addOffset(bytes - 1)にコピーされます。 ソースおよびアドレス範囲が重複する場合、コピーは、最初にsrcからsrc.addOffset(bytes - 1)までのアドレスのバイトがサイズbytesで一時セグメントにコピーされたものとして実行され、次に、一時セグメントの内容がdst.addOffset(bytes - 1)を介してdstのバイトにコピーされました。
      パラメータ:
      src - ソース・アドレス。
      dst - ターゲット・アドレス。
      bytes - コピーされるバイト数。
      例外:
      IndexOutOfBoundsException - bytes < 0の場合、またはsrcまたはdstに関連付けられているセグメントのサイズより大きい場合。
      IllegalStateException - ソース・アドレスまたはターゲット・アドレスのいずれかが、すでに閉じられているメモリー・セグメントに属している場合、またはいずれかのセグメントを所有しているスレッド以外のスレッドからアクセスが発生した場合。
      UnsupportedOperationException - dstが読取り専用セグメント(MemorySegment.isReadOnly()を参照してください)に関連付けられている場合。