public interface MemoryAddress
メモリー・アドレスは、指定の
MemorySegment
内のオフセットをエンコードします。 一般にメモリー・アドレスはMemorySegment.baseAddress()
メソッドを使用して取得され、そのようなアドレスはaddOffset(long)
を使用して必要に応じて調整できます。
メモリー・アドレスは、一般に、メモリー・アクセス変数ハンドル・コールで最初の引数として使用され、基礎となるメモリー・セグメントに対する処理を実行します。 メモリー・アドレスは常にメモリー・セグメントと関連付けられているため、このようなアクセス操作は、アドレス所有メモリー・リージョンによって実施される空間チェックおよび一時的チェックの対象となります。
このインタフェースのすべての実装はvalue-basedである必要があります。MemoryAddress
のインスタンスでアイデンティティに依存する操作(参照の等価性の(==
)、アイデンティティ・ハッシュ・コード、同期化など)を使用すると、予期しない結果が生じる可能性があるため、使用しないでください。 比較する場合は、equals
メソッドを使用することをお薦めします。
非プラットフォーム・クラスは、MemoryAddressを直接実装することはできません。
- APIのノート:
- 将来、Java言語で許可される場合、
MemoryAddress
がsealed
インタフェースになる可能性があり、明示的に許可されているタイプ以外はサブクラス化できなくなります。 - 実装要件:
- このインタフェースの実装は、不変でスレッド・セーフです。
-
メソッドのサマリー
修飾子と型 メソッド 説明 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
throughsrc.addOffset(bytes - 1)
に含まれるアドレスのバイト数が、dst
throughdst.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()
を参照してください)に関連付けられている場合。
-