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

インタフェースMemoryAddress


public interface MemoryAddress
メモリー・アドレスは、メモリー・ロケーションへの参照をモデル化します。 メモリー・アドレスは通常、MemorySegment.baseAddress()メソッドを使用して取得されます。このようなアドレスはcheckedと呼ばれ、基礎となるメモリー・セグメント(segment()およびsegmentOffset()を参照してください)へのoffsetsとして表現できます。 チェックされたメモリー・アドレスは空間境界と時間境界の両方を特徴としているため、これらのアドレスは「安全」メモリー・アクセスvarハンドル(MemoryHandlesを参照してください)を使用して間接参照できます。

住所にセグメントが関連付けられていない場合は、uncheckedと呼ばれます。 チェックされていないメモリー・アドレスは、既知の空間境界または一時境界を特徴としません。したがって、チェックされていないメモリー・アドレスを使用してメモリーの間接参照操作を試行すると、実行時例外が発生します。 チェックされていないアドレスは、たとえばofLong(long)メソッドを呼び出すことで取得できます。

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

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

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

    フィールド
    修飾子と型 フィールド 説明
    static MemoryAddress NULL
    NULLアドレスをモデル化するuncheckedメモリー・アドレス・インスタンス。
  • メソッドのサマリー

    修飾子と型 メソッド 説明
    MemoryAddress addOffset​(long offset)
    指定されたオフセット(バイト単位)を使用して、現在のメモリー・アドレスから新しいメモリー・アドレスを生成します(負の場合もあります)。
    boolean equals​(Object that)
    指定されたオブジェクトをこのアドレスと比較し、等価性を維持します。
    int hashCode()
    この住所のハッシュ・コード値を返します。
    static MemoryAddress ofLong​(long value)
    指定されたlongアドレスから新しいuncheckedメモリー・アドレス・インスタンスを取得します。
    MemoryAddress rebase​(MemorySegment segment)
    この住所を指定されたセグメントへのオフセットとして再入力します。
    MemorySegment segment()
    このアドレスが属するメモリー・セグメント(もしあれば)を返します。
    long segmentOffset()
    このメモリー・アドレスのオフセットを基礎となるセグメント(もしあれば)に返します。
    long toRawLongValue()
    このメモリー・アドレスに関連付けられたraw long値を返します。
  • フィールド詳細

    • NULL

      static final MemoryAddress NULL
      NULLアドレスをモデル化するuncheckedメモリー・アドレス・インスタンス。 このアドレスはメモリー・セグメントに連動していないため、間接参照できません。
  • メソッドの詳細

    • addOffset

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

      long segmentOffset()
      このメモリー・アドレスのオフセットを基礎となるセグメント(もしあれば)に返します。
      戻り値:
      基礎となるセグメント(もしあれば)へのこのメモリー・アドレスのオフセット。
      例外:
      UnsupportedOperationException - このメモリー・アドレスにセグメントが関連付けられていない場合(segment() == nullなど)。
    • toRawLongValue

      long toRawLongValue()
      このメモリー・アドレスに関連付けられたraw long値を返します。
      戻り値:
      このメモリー・アドレスに関連付けられたraw long値。
      例外:
      UnsupportedOperationException - このメモリー・アドレスがヒープ・セグメントに関連付けられている場合。
    • segment

      MemorySegment segment()
      このアドレスが属するメモリー・セグメント(もしあれば)を返します。
      戻り値:
      このアドレスが属するメモリー・セグメント。そのようなセグメントが存在しない場合はnull
    • リベース

      MemoryAddress rebase​(MemorySegment segment)
      この住所を指定されたセグメントへのオフセットとして再入力します。
      パラメータ:
      segment - リベースされるセグメント
      戻り値:
      指定されたセグメントを介して同じメモリー・ロケーションを指す新しいアドレス
      例外:
      IllegalArgumentException - 指定されたセグメントがこの住所の有効なリベース・ターゲットでない場合。 これは、たとえば、アドレス指定されたヒープ・ベースがヒープ外メモリー・セグメントにリベースされた場合に発生する可能性があります。
    • equals

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

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

      static MemoryAddress ofLong​(long value)
      指定されたlongアドレスから新しいuncheckedメモリー・アドレス・インスタンスを取得します。 返されたアドレスはメモリー・セグメントに連動していないため、間接参照できません。
      パラメータ:
      value - 長いアドレス。
      戻り値:
      新しいメモリー・アドレス・インスタンス。