public interface MemoryAddress
メモリー・アドレスは、メモリー・ロケーションへの参照をモデル化します。 メモリー・アドレスは通常、
MemorySegment.baseAddress()
メソッドを使用して取得されます。このようなアドレスはcheckedと呼ばれ、基礎となるメモリー・セグメント(segment()
およびsegmentOffset()
を参照してください)へのoffsetsとして表現できます。 チェックされたメモリー・アドレスは空間境界と時間境界の両方を特徴としているため、これらのアドレスは「安全」メモリー・アクセスvarハンドル(MemoryHandles
を参照してください)を使用して間接参照できます。
住所にセグメントが関連付けられていない場合は、uncheckedと呼ばれます。 チェックされていないメモリー・アドレスは、既知の空間境界または一時境界を特徴としません。したがって、チェックされていないメモリー・アドレスを使用してメモリーの間接参照操作を試行すると、実行時例外が発生します。 チェックされていないアドレスは、たとえばofLong(long)
メソッドを呼び出すことで取得できます。
このインタフェースのすべての実装はvalue-basedである必要があります。MemoryAddress
のインスタンスでアイデンティティに依存する操作(参照の等価性の(==
)、アイデンティティ・ハッシュ・コード、同期化など)を使用すると、予期しない結果が生じる可能性があるため、使用しないでください。 比較する場合は、equals
メソッドを使用することをお薦めします。
非プラットフォーム・クラスは、MemoryAddressを直接実装することはできません。
- APIのノート:
- 将来、Java言語で許可される場合、
MemoryAddress
がsealed
インタフェースになる可能性があり、明示的に許可されているタイプ以外はサブクラス化できなくなります。 - 実装要件:
- このインタフェースの実装は不変、スレッド・セーフ、および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 NULLNULL
アドレスをモデル化する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
- 長いアドレス。- 戻り値:
- 新しいメモリー・アドレス・インスタンス。
-