- すべてのスーパー・インタフェース:
AddressablePREVIEW
MemorySegment
は、JavaプラットフォームのプレビューAPIです。
MemorySession
PREVIEW)に関連付けられます。 空間境界は、メモリー・セグメントに対するメモリー・アクセス操作が、「外部」にアクセスされるメモリー・セグメントの境界よりも少ないメモリーのロケーションに影響を与えないようにします。 一時的な境界により、メモリー・セグメントに関連付けられたメモリー・セッションが(MemorySession.close()
PREVIEWを参照してください)で閉じられた後に、セグメントに対するメモリー・アクセス演算が発生しないようにします。 メモリー・セグメントには様々な種類があります:
- 「ネイティブ・メモリー・セグメント」、オフ・ヒープ・メモリーによってバックアップされます
- 「マッピングされたメモリー・セグメント」PREVIEW:ファイルをメイン・メモリー(
mmap
)にマップすることによって取得されます。マップされたメモリー・セグメントの内容は、基礎となるメモリー・マップ・ファイルとの間で「存続」および「読み込み完了」にすることができます - 「配列セグメント」、既存のヒープ割当てJava配列のラップ、および
- 「バッファ・セグメント」、既存の
Buffer
インスタンスのラップ。バッファ・メモリー・セグメントは、ラップされたバッファ・インスタンスの特性に応じて、オフ・ヒープ・メモリーまたはオン・ヒープ・メモリーのいずれかによってバックアップされる場合があります。 たとえば、ByteBuffer.allocateDirect(int)
メソッドで作成されたバイト・バッファから取得されたバッファ・メモリー・セグメントは、オフ・ヒープ・メモリーによってバックアップされます。
ライフサイクルおよび制約
メモリー・セグメントは、「メモリー・セッション」に関連付けられます。 メモリー・セッションに関連付けられたすべてのリソースについて、その基礎となるセッションが閉じられた後にセグメントにアクセスすることはできません。 たとえば、次のコードは例外になります:MemorySegment segment = null;
try (MemorySession session = MemorySession.openConfined()) {
segment = MemorySegment.allocateNative(8, session);
}
segment.get(ValueLayout.JAVA_LONG, 0); // already closed!
ヒープ・セグメントは常にglobalPREVIEWメモリー・セッションに関連付けられます。 このセッションはクローズできず、それに関連付けられたセグメントを「いつも生きている」とみなすことができます。 バッファ・セグメントは通常、グローバル・メモリー・セッションに関連付けられますが、例外は1つです: メモリー・セグメントS
でasByteBuffer()
メソッドをコールして取得したバイト・バッファ・インスタンスから作成されたバッファ・セグメントは、S
と同じメモリー・セッションに関連付けられます。
メモリー・セグメントの参照解除
メモリー・セグメントは、このクラス(たとえば、get(ValueLayout.OfInt, long)
)で提供される様々なメソッドを使用して読取りまたは書込みできます。 各間接参照メソッドは、サイズ、整列制約、バイト順序、間接参照演算に関連付けられたJavaタイプおよびオフセットを指定する「値レイアウト」PREVIEWを取ります。 たとえば、「デフォルトのエンディアン」を使用してセグメントからintを読み取るには、次のコードを使用できます:
MemorySegment segment = ...
int value = segment.get(ValueLayout.JAVA_INT, 0);
MemorySegment segment = ...
int value = segment.get(ValueLayout.JAVA_INT.withOrder(BIG_ENDIAN), 0);
long
オフセットを受け入れるvarハンドルを取得できます。 MethodHandles
クラスで定義されたvarハンドル・コンビネータ関数を使用してセグメントvarハンドル・ビューを適応させることで、より複雑なアクセスvarハンドルを取得できます:
MemorySegment segment = ...
VarHandle intHandle = MethodHandles.memorySegmentViewVarHandle(ValueLayout.JAVA_INT);
MethodHandle multiplyExact = MethodHandles.lookup()
.findStatic(Math.class, "multiplyExact",
MethodType.methodType(long.class, long.class, long.class));
intHandle = MethodHandles.filterCoordinates(intHandle, 1,
MethodHandles.insertArguments(multiplyExact, 0, 4L));
intHandle.get(segment, 3L); // get int element at offset 3 * 4 = 12
MemorySegment segment = ...
VarHandle intHandle = ValueLayout.JAVA_INT.arrayElementVarHandle();
intHandle.get(segment, 3L); // get int element at offset 3 * 4 = 12
メモリー・セグメントのスライス
メモリー・セグメントは「スライス」をサポートしています。 メモリー・セグメントは、基礎となる同じメモリー・リージョンによって支えられた他のセグメントを「入手」するために使用できますが、元のセグメントのものより「厳しい」空間境界があります:MemorySession session = ...
MemorySegment segment = MemorySegment.allocateNative(100, session);
MemorySegment slice = segment.asSlice(50, 10);
slice.get(ValueLayout.JAVA_INT, 20); // Out of bounds!
session.close();
slice.get(ValueLayout.JAVA_INT, 0); // Already closed!
segment
のオフセット50から始まり、長さが10バイトのスライスが作成されます。 その結果、slice
セグメントのオフセット20でint値を読み取ろうとすると例外が発生します。 元のセグメントの「一時的な境界」PREVIEWはスライスによって継承されます。つまり、segment
に関連付けられたメモリー・セッションが閉じられると、slice
もアクセスできなくなります。
クライアントはセグメントからStream
を取得し、これを使用してセグメント(指定された要素レイアウトに従って)をスライスし、複数のスレッドが分離セグメント・スライス(これを行うには、セグメントを共有メモリー・セッションに関連付ける必要があります)で並行して動作するようにすることもできます。 次のコードを使用すると、メモリー・セグメント内のすべてのint値を並列に合計できます:
try (MemorySession session = MemorySession.openShared()) {
SequenceLayout SEQUENCE_LAYOUT = MemoryLayout.sequenceLayout(1024, ValueLayout.JAVA_INT);
MemorySegment segment = MemorySegment.allocateNative(SEQUENCE_LAYOUT, session);
int sum = segment.elements(ValueLayout.JAVA_INT).parallel()
.mapToInt(s -> s.get(ValueLayout.JAVA_INT, 0))
.sum();
}
位置合せ
レイアウトを使用してメモリー・セグメントを間接参照する場合、ランタイムは、参照解除されるセグメント・アドレスがレイアウト「線形拘束」PREVIEWと一致することを確認する必要があります。 参照解除されるセグメントがネイティブ・セグメントである場合、境界整列チェックの実行に使用できる具体的な「ベース・アドレス」があります。 次の擬似関数では、次のようになります:boolean isAligned(MemorySegment segment, long offset, MemoryLayout layout) {
return ((segment.address().toRawLongValue() + offset) % layout.byteAlignment()) == 0
}
前述の定義は保守的であることに注意してください: たとえば、
配列型 位置合せ boolean[]
1
byte[]
1
char[]
2
short[]
2
int[]
4
float[]
4
long[]
8
double[]
8
byte[]
から構築されたヒープ・セグメントにアドレスS
のサブセットがあり、そのサブセットは8バイトの整列になります。 ただし、どのセグメント・アドレスがS
に属するかを決定するには、最終的に実装に依存する詳細について推論する必要があります。
制限付きメモリー・セグメント
場合によっては、ネイティブ・コードから取得したメモリー・アドレスを、完全な空間、時間、および制限の境界を持つメモリー・セグメントに変換する必要があります。 これを行うには、クライアントは、セグメント・サイズとセグメント「セッション」PREVIEWを指定して、特定のメモリー・アドレスからネイティブ・セグメントを「非安全に」「入手」できます。 これは「制限付き」演算であり、注意して使用する必要があります: たとえば、セグメント・サイズが正しくないと、メモリー・セグメントを参照解除しようとしたときにVMがクラッシュする可能性があります。
マップされたメモリー・セグメントに対する高度な低レベル制御を必要とするクライアントは、カスタム・マップされたメモリー・セグメント・ファクトリの記述を検討する場合があります。たとえば、Linuxでは、Linker
PREVIEWを使用します。必要なパラメータを使用してmmap
をコールできます。返されるアドレスは、MemoryAddress.ofLong(long)
PREVIEWおよびofAddress(MemoryAddress, long, MemorySession)
を使用して、メモリー・セグメントに簡単にラップできます。
- 実装要件:
- このインタフェースの実装は不変、スレッド・セーフ、およびvalue-basedです。
- 導入されたバージョン:
- 19
-
メソッドのサマリー
修飾子と型メソッド説明address()
このネイティブ・メモリー・セグメントに関連付けられたベース・メモリー・アドレスを返します。static MemorySegmentPREVIEW
allocateNative
(long bytesSize, long alignmentBytes, MemorySessionPREVIEW session) 指定されたサイズ(バイト単位)、整列制約(バイト単位)およびメモリー・セッションでネイティブ・メモリー・セグメントを作成します。static MemorySegmentPREVIEW
allocateNative
(long bytesSize, MemorySessionPREVIEW session) 指定されたサイズ(バイト単位)およびメモリー・セッションでネイティブ・メモリー・セグメントを作成します。static MemorySegmentPREVIEW
allocateNative
(MemoryLayoutPREVIEW layout, MemorySessionPREVIEW session) 指定されたレイアウトおよびメモリー・セッションでネイティブ・メモリー・セグメントを作成します。ByteBuffer
でこのセグメントをラップします。このセグメントと指定されたセグメントの間の重複である、このセグメントのスライスを返します。このセグメントの読取り専用ビューを返します。default MemorySegmentPREVIEW
asSlice
(long offset) 指定されたオフセットで、このメモリー・セグメントのスライスを返します。asSlice
(long offset, long newSize) 指定されたオフセットで、このメモリー・セグメントのスライスを返します。long
byteSize()
このメモリー・セグメントのサイズ(バイト単位)を返します。static void
copy
(MemorySegmentPREVIEW srcSegment, long srcOffset, MemorySegmentPREVIEW dstSegment, long dstOffset, long bytes) ソース・セグメントから宛先セグメントへの一括コピーを実行します。static void
copy
(MemorySegmentPREVIEW srcSegment, ValueLayoutPREVIEW srcElementLayout, long srcOffset, MemorySegmentPREVIEW dstSegment, ValueLayoutPREVIEW dstElementLayout, long dstOffset, long elementCount) ソース・セグメントから宛先セグメントへの一括コピーを実行します。static void
copy
(MemorySegmentPREVIEW srcSegment, ValueLayoutPREVIEW srcLayout, long srcOffset, Object dstArray, int dstIndex, int elementCount) ソース・メモリー・セグメントから宛先配列に多数の要素をコピーします。static void
copy
(Object srcArray, int srcIndex, MemorySegmentPREVIEW dstSegment, ValueLayoutPREVIEW dstLayout, long dstOffset, int elementCount) ソース配列から宛先メモリー・セグメントに多数の要素をコピーします。default MemorySegmentPREVIEW
指定されたソース・セグメントからこのセグメントへの一括コピーを実行します。elements
(MemoryLayoutPREVIEW elementLayout) このセグメント内の分離スライス(指定したレイアウトのサイズと一致するサイズ)に対して連続したStream
を返します。boolean
指定されたオブジェクトをこのメモリー・セグメントと比較し、等しいかどうかを調べます。fill
(byte value) このメモリー・セグメントに値を入力します。void
force()
マップされたセグメント・ファイル記述子によって記述されたストレージ・デバイスに、このマップされたセグメントの内容に加えた変更を強制的に書き込みます。default MemoryAddressPREVIEW
get
(ValueLayout.OfAddressPREVIEW layout, long offset) 指定されたレイアウトで、指定されたオフセットでこのセグメントからアドレスを読み取ります。default boolean
get
(ValueLayout.OfBooleanPREVIEW layout, long offset) 指定されたオフセットを使用して、このセグメントからブールを読み取ります。default byte
get
(ValueLayout.OfBytePREVIEW layout, long offset) 指定されたレイアウトで、指定されたオフセットでこのセグメントからバイトを読み取ります。default char
get
(ValueLayout.OfCharPREVIEW layout, long offset) 指定されたレイアウトで、指定されたオフセットでこのセグメントからcharを読み取ります。default double
get
(ValueLayout.OfDoublePREVIEW layout, long offset) 指定されたレイアウトで、指定されたオフセットでこのセグメントから倍精度浮動小数点数を読み取ります。default float
get
(ValueLayout.OfFloatPREVIEW layout, long offset) 指定されたレイアウトを使用して、指定されたオフセットでこのセグメントからフロートを読み取ります。default int
get
(ValueLayout.OfIntPREVIEW layout, long offset) 指定されたレイアウトを使用して、指定されたオフセットでこのセグメントからintを読み取ります。default long
get
(ValueLayout.OfLongPREVIEW layout, long offset) 指定されたレイアウトを使用して、指定されたオフセットでこのセグメントからlongを読み取ります。default short
get
(ValueLayout.OfShortPREVIEW layout, long offset) 指定されたレイアウトで、指定されたオフセットでこのセグメントからshortを読み取ります。default MemoryAddressPREVIEW
getAtIndex
(ValueLayout.OfAddressPREVIEW layout, long index) 指定された索引で、指定されたレイアウト・サイズでスケールされたアドレスをこのセグメントから読み取ります。default char
getAtIndex
(ValueLayout.OfCharPREVIEW layout, long index) 指定された索引のこのセグメントから、指定されたレイアウト・サイズで拡大縮小されたcharを読み取ります。default double
getAtIndex
(ValueLayout.OfDoublePREVIEW layout, long index) 指定された索引で、指定されたレイアウト・サイズで倍精度浮動小数点数を読み取ります。default float
getAtIndex
(ValueLayout.OfFloatPREVIEW layout, long index) 指定された索引のこのセグメントからフロートを読み取り、指定されたレイアウト・サイズでスケールします。default int
getAtIndex
(ValueLayout.OfIntPREVIEW layout, long index) 指定されたレイアウト・サイズでスケールされた、指定された索引のこのセグメントからintを読み取ります。default long
getAtIndex
(ValueLayout.OfLongPREVIEW layout, long index) 指定された索引でこのセグメントから、指定されたレイアウト・サイズでスケールされたlongを読み取ります。default short
getAtIndex
(ValueLayout.OfShortPREVIEW layout, long index) 指定された索引のこのセグメントから、指定されたレイアウト・サイズでスケールされたshortを読み取ります。default String
getUtf8String
(long offset) 指定されたオフセットでこのセグメントからUTF-8エンコードされたNULL終了文字列を読み取ります。int
hashCode()
このメモリー・セグメントのハッシュ・コード値を返します。boolean
isLoaded()
このマップされたセグメントの内容が物理メモリーに存在するかどうかを決定します。boolean
isMapped()
このセグメントがマップされたセグメントの場合は、true
を返します。boolean
isNative()
このセグメントがネイティブ・セグメントの場合は、true
を返します。boolean
このセグメントが読取り専用の場合、true
を返します。void
load()
このマップされたセグメントの内容を物理メモリーにロードします。long
mismatch
(MemorySegmentPREVIEW other) このセグメントと指定された他のセグメントとの間で最初の不一致のオフセットをバイト単位で検索して返します。static MemorySegmentPREVIEW
ofAddress
(MemoryAddressPREVIEW address, long bytesSize, MemorySessionPREVIEW session) 指定されたサイズ、ベース・アドレス、およびメモリー・セッションでネイティブ・メモリー・セグメントを作成します。static MemorySegmentPREVIEW
ofArray
(byte[] arr) 指定されたヒープ割り当てバイト配列に関連付けられたメモリーをモデル化する配列メモリー・セグメントを作成します。static MemorySegmentPREVIEW
ofArray
(char[] arr) 指定されたヒープ割り当てchar配列に関連付けられたメモリーをモデル化する配列メモリー・セグメントを作成します。static MemorySegmentPREVIEW
ofArray
(double[] arr) 指定されたヒープ割り当て倍精度配列に関連付けられたメモリーをモデル化する配列メモリー・セグメントを作成します。static MemorySegmentPREVIEW
ofArray
(float[] arr) 指定されたヒープ割り当てフロート配列に関連付けられたメモリーをモデル化する配列メモリー・セグメントを作成します。static MemorySegmentPREVIEW
ofArray
(int[] arr) 指定されたヒープ割当てint配列に関連付けられたメモリーをモデル化する配列メモリー・セグメントを作成します。static MemorySegmentPREVIEW
ofArray
(long[] arr) 指定されたヒープ割り当て長配列に関連付けられたメモリーをモデル化する配列メモリー・セグメントを作成します。static MemorySegmentPREVIEW
ofArray
(short[] arr) 指定されたヒープ割り当てショート・アレイに関連付けられたメモリーをモデル化するアレイ・メモリー・セグメントを作成します。static MemorySegmentPREVIEW
指定されたBuffer
インスタンスに関連付けられたメモリーをモデル化するバッファ・メモリー・セグメントを作成します。long
このセグメントに対して指定されたセグメントのオフセット(バイト単位)を返します。session()
このメモリー・セグメントに関連付けられたメモリー・セッションを返します。default void
set
(ValueLayout.OfAddressPREVIEW layout, long offset, AddressablePREVIEW value) 指定されたレイアウトを使用して、指定されたオフセットでこのセグメントにアドレスを書き込みます。default void
set
(ValueLayout.OfBooleanPREVIEW layout, long offset, boolean value) 指定されたレイアウトを使用して、指定されたオフセットでこのセグメントにブール値を書き込みます。default void
set
(ValueLayout.OfBytePREVIEW layout, long offset, byte value) 指定されたレイアウトを使用して、指定されたオフセットでこのセグメントにバイトを書き込みます。default void
set
(ValueLayout.OfCharPREVIEW layout, long offset, char value) 指定されたレイアウトを使用して、指定されたオフセットでこのセグメントに文字を書き込みます。default void
set
(ValueLayout.OfDoublePREVIEW layout, long offset, double value) 指定されたレイアウトを使用して、指定されたオフセットでこのセグメントにdoubleを書き込みます。default void
set
(ValueLayout.OfFloatPREVIEW layout, long offset, float value) 指定されたレイアウトを使用して、指定されたオフセットでこのセグメントにフロートを書き込みます。default void
set
(ValueLayout.OfIntPREVIEW layout, long offset, int value) 指定されたレイアウトを使用して、指定されたオフセットでこのセグメントにintを書き込みます。default void
set
(ValueLayout.OfLongPREVIEW layout, long offset, long value) 指定されたレイアウトを使用して、指定されたオフセットでこのセグメントにlongを書き込みます。default void
set
(ValueLayout.OfShortPREVIEW layout, long offset, short value) 指定されたレイアウトを使用して、指定されたオフセットでこのセグメントにshortを書き込みます。default void
setAtIndex
(ValueLayout.OfAddressPREVIEW layout, long index, AddressablePREVIEW value) 指定された索引で、指定されたレイアウト・サイズでスケールされたアドレスをこのセグメントに書き込みます。default void
setAtIndex
(ValueLayout.OfCharPREVIEW layout, long index, char value) 指定された索引で、指定されたレイアウト・サイズでスケールされたcharをこのセグメントに書き込みます。default void
setAtIndex
(ValueLayout.OfDoublePREVIEW layout, long index, double value) 指定された索引で、指定されたレイアウト・サイズでスケールされた倍精度浮動小数点数をこのセグメントに書き込みます。default void
setAtIndex
(ValueLayout.OfFloatPREVIEW layout, long index, float value) 指定された索引でこのセグメントにフロートを書き込み、指定されたレイアウト・サイズでスケールします。default void
setAtIndex
(ValueLayout.OfIntPREVIEW layout, long index, int value) 指定された索引で、指定されたレイアウト・サイズでスケールされたintをこのセグメントに書き込みます。default void
setAtIndex
(ValueLayout.OfLongPREVIEW layout, long index, long value) 指定された索引で、所定のレイアウト・サイズでスケールされたlongをこのセグメントに書き込みます。default void
setAtIndex
(ValueLayout.OfShortPREVIEW layout, long index, short value) 指定された索引で、指定されたレイアウト・サイズでスケールされたこのセグメントにshortを書き込みます。default void
setUtf8String
(long offset, String str) 指定された文字列を指定されたオフセットでこのセグメントに書き込み、UTF-8エンコーディングを使用してNULLで終了するバイト・シーケンスに変換します。spliterator
(MemoryLayoutPREVIEW elementLayout) このメモリー・セグメントのスプリッテレータを返します。byte[]
toArray
(ValueLayout.OfBytePREVIEW elementLayout) このメモリー・セグメントの内容を新しいバイト配列にコピーします。char[]
toArray
(ValueLayout.OfCharPREVIEW elementLayout) このメモリー・セグメントの内容を新しいchar配列にコピーします。double[]
toArray
(ValueLayout.OfDoublePREVIEW elementLayout) このメモリー・セグメントの内容を新しい二重配列にコピーします。float[]
toArray
(ValueLayout.OfFloatPREVIEW elementLayout) このメモリー・セグメントの内容を新しい浮動小数配列にコピーします。int[]
toArray
(ValueLayout.OfIntPREVIEW elementLayout) このメモリー・セグメントの内容を新しいint配列にコピーします。long[]
toArray
(ValueLayout.OfLongPREVIEW elementLayout) このメモリー・セグメントの内容を新しい長い配列にコピーします。short[]
toArray
(ValueLayout.OfShortPREVIEW elementLayout) このメモリー・セグメントの内容を新しい短い配列にコピーします。void
unload()
このマップされたセグメントの内容を物理メモリーからアンロードします。
-
メソッドの詳細
-
address
MemoryAddressPREVIEW address()このネイティブ・メモリー・セグメントに関連付けられたベース・メモリー・アドレスを返します。- 定義:
- インタフェース
AddressablePREVIEW
内のaddress
- 戻り値:
- このネイティブ・メモリー・セグメントに関連付けられたベース・メモリー・アドレス
- 例外:
UnsupportedOperationException
- このセグメントが「ネイティブ」セグメントでない場合。IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。
-
spliterator
Spliterator<MemorySegmentPREVIEW> spliterator(MemoryLayoutPREVIEW elementLayout) このメモリー・セグメントのスプリッテレータを返します。 返されるスプリッテレータは、Spliterator.SIZED
、Spliterator.SUBSIZED
、Spliterator.IMMUTABLE
、Spliterator.NONNULL
およびSpliterator.ORDERED
の特性を報告します。返される分割子は、指定された要素レイアウトに従ってこのセグメントを分割します。つまり、指定されたレイアウトのサイズがNの場合、
Spliterator.trySplit()
をコールすると、約S/N
要素(nが偶数かどうかによって異なります) (S
はこのセグメントのサイズ)に分かれます。 そのため、S/N >= 2
であれば分割が可能です。 スプリッタは、このセグメントと同じメモリー・セッションに関連付けられているセグメントを返します。返されたスプリケータでは、このセグメントを非結合「スライス」に効果的にスライスできます。これにより、複数のスレッドでパラレルに処理できます。
- パラメータ:
elementLayout
- 分割に使用されるレイアウト。- 戻り値:
- このセグメントの要素スプリッテレータ
- 例外:
IllegalArgumentException
-elementLayout
サイズがゼロの場合、またはセグメント・サイズがモジュール化された場合は、elementLayout
サイズがゼロより大きいか、指定したレイアウトでこのセグメントが「線形拘束と互換性がありません」の場合、またはelementLayout
整列がそのサイズより大きい場合。
-
elements
Stream<MemorySegmentPREVIEW> elements(MemoryLayoutPREVIEW elementLayout) このセグメント内の分離スライス(指定したレイアウトのサイズと一致するサイズ)に対して連続したStream
を返します。 このメソッドの呼出しは、次のコードと同じです:StreamSupport.stream(segment.spliterator(elementLayout), false);
- パラメータ:
elementLayout
- 分割に使用されるレイアウト。- 戻り値:
- このセグメント内の連続した
Stream
スライス。 - 例外:
IllegalArgumentException
-elementLayout
サイズがゼロの場合、またはセグメント・サイズがモジュール化された場合は、elementLayout
サイズがゼロより大きいか、指定したレイアウトでこのセグメントが「線形拘束と互換性がありません」の場合、またはelementLayout
整列がそのサイズより大きい場合。
-
session
MemorySessionPREVIEW session()このメモリー・セグメントに関連付けられたメモリー・セッションを返します。- 戻り値:
- このメモリー・セグメントに関連付けられたメモリー・セッション
-
byteSize
long byteSize()このメモリー・セグメントのサイズ(バイト単位)を返します。- 戻り値:
- このメモリー・セグメントのサイズ(バイト単位)
-
asSlice
MemorySegmentPREVIEW asSlice(long offset, long newSize) 指定されたオフセットで、このメモリー・セグメントのスライスを返します。 返されるセグメント・ベース・アドレスは、このセグメントのベース・アドレスと指定されたオフセットです。そのサイズは、指定された引数によって指定されます。- パラメータ:
offset
- 新しいセグメント・ベース・オフセット(現在のセグメント・ベース・アドレスとの相対)(バイト単位)です。newSize
- 新しいセグメント・サイズ(バイト単位で指定)。- 戻り値:
- このメモリー・セグメントのスライス。
- 例外:
IndexOutOfBoundsException
-offset < 0
、offset > byteSize()
、newSize < 0
またはnewSize > byteSize() - offset
の場合- 関連項目:
-
asSlice
default MemorySegmentPREVIEW asSlice(long offset) 指定されたオフセットで、このメモリー・セグメントのスライスを返します。 返されるセグメント・ベース・アドレスは、このセグメントの基本アドレスと指定されたオフセットです。そのサイズは、指定されたオフセットをこのセグメント・サイズから減算して計算されます。次のコードと同等です:
asSlice(offset, byteSize() - offset);
- パラメータ:
offset
- 新しいセグメント・ベース・オフセット(現在のセグメント・ベース・アドレスとの相対)(バイト単位)です。- 戻り値:
- このメモリー・セグメントのスライス。
- 例外:
IndexOutOfBoundsException
- ifoffset < 0
,またはoffset > byteSize()
。- 関連項目:
-
isReadOnly
boolean isReadOnly()このセグメントが読取り専用の場合、true
を返します。- 戻り値:
true
:このセグメントが読取り専用の場合- 関連項目:
-
asReadOnly
MemorySegmentPREVIEW asReadOnly()このセグメントの読取り専用ビューを返します。 結果のセグメントはこのセグメントと同一になりますが、返されたセグメントの内容を上書きしようとすると、ランタイム例外が発生します。- 戻り値:
- このセグメントの読取り専用ビュー
- 関連項目:
-
isNative
boolean isNative()このセグメントがネイティブ・セグメントの場合は、true
を返します。 ネイティブ・メモリー・セグメントは、allocateNative(long, MemorySession)
(および関連)ファクトリ、またはofBuffer(Buffer)
ファクトリを使用して「ダイレクトバイトバッファ」から導出されたバッファ・セグメント、または「マップ済」セグメントを使用して作成されます。- 戻り値:
- このセグメントがネイティブ・セグメントの場合は
true
。
-
isMapped
boolean isMapped()このセグメントがマップされたセグメントの場合は、true
を返します。 マップされたメモリー・セグメントは、FileChannel.map(FileChannel.MapMode, long, long, MemorySession)
PREVIEWファクトリまたはofBuffer(Buffer)
ファクトリを使用してMappedByteBuffer
から導出されたバッファ・セグメントを使用して作成されます。- 戻り値:
- このセグメントがマップされたセグメントである場合は
true
。
-
asOverlappingSlice
Optional<MemorySegmentPREVIEW> asOverlappingSlice(MemorySegmentPREVIEW other) このセグメントと指定されたセグメントの間の重複である、このセグメントのスライスを返します。2つのセグメント
S1
およびS2
は、同じメモリー・リージョンにバックアップされている少なくとも2つのスライスL1
(S1
から)およびL2
(S2
から)が見つかった場合、オー・バー・ラップするとみなされます。 そのため、「ネイティブ」セグメントをヒープ・セグメントと重複させることはできません。この場合、または重複が発生しない場合、null
が返されます。- パラメータ:
other
- このセグメントとの重複をテストするセグメント。- 戻り値:
- このセグメント(重複が発生した場合)のスライス。
-
segmentOffset
long segmentOffset(MemorySegmentPREVIEW other) このセグメントに対して指定されたセグメントのオフセット(バイト単位)を返します。オフセットは、このセグメントのベース・アドレスに対する相対的な値であり、負または正の値にできます。 たとえば、両方のセグメントがネイティブ・セグメントの場合、結果のオフセットは次のように計算できます:
other.baseAddress().toRawLongValue() - segment.baseAddress().toRawLongValue()
0
が返されます。other
がこのセグメントのスライスである場合、オフセットは常に0 <= x < this.byteSize()
です。- パラメータ:
other
- オフセットを取得するセグメント。- 戻り値:
- 指定されたセグメントの相対オフセット(バイト単位)。
-
fill
MemorySegmentPREVIEW fill(byte value) このメモリー・セグメントに値を入力します。具体的には、指定された値がこのセグメントの各アドレスに入力されます。 (ただし、より効率的である可能性があります。)と同等のコードは次のとおりです:
byteHandle = MemoryLayout.ofSequence(ValueLayout.JAVA_BYTE) .varHandle(byte.class, MemoryLayout.PathElement.sequenceElement()); for (long l = 0; l < segment.byteSize(); l++) { byteHandle.set(segment.address(), l, value); }
フィルは、セグメントのメモリーを初期化またはリセットする場合に便利です。
- パラメータ:
value
- このセグメントに入力する値- 戻り値:
- このメモリー・セグメント
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。UnsupportedOperationException
- このセグメントが読取り専用(isReadOnly()
を参照してください)の場合。
-
copyFrom
default MemorySegmentPREVIEW copyFrom(MemorySegmentPREVIEW src) 指定されたソース・セグメントからこのセグメントへの一括コピーを実行します。 具体的には、ソース・セグメントのオフセット0
からsrc.byteSize() - 1
までのバイトは、src.byteSize() - 1
を介したオフセット0
でこのセグメントにコピーされます。このメソッドの呼出しは、次のコードと同じです:
MemorySegment.copy(src, 0, this, 0, src.byteSize);
- パラメータ:
src
- ソース・セグメント。- 戻り値:
- このセグメント。
- 例外:
IndexOutOfBoundsException
-src.byteSize() > this.byteSize()
の場合。IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalStateException
-src
に関連付けられた「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、src
に関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。UnsupportedOperationException
- このセグメントが読取り専用(isReadOnly()
を参照してください)の場合。
-
mismatch
long mismatch(MemorySegmentPREVIEW other) このセグメントと指定された他のセグメントとの間で最初の不一致のオフセットをバイト単位で検索して返します。 オフセットは各セグメントの「拠点アドレス」を基準とし、0 (inclusive)から小さいメモリー・セグメント(exclusive)のsize (バイト単位)までの範囲になります。2つのセグメントが共通プリフィクスを共有している場合、返されるオフセットは共通プリフィクスの長さであり、それぞれのセグメント内のそのオフセットで2つのセグメント間に不一致があることが後続しています。 1つのセグメントがもう一方のセグメントの適切なプレフィクスである場合、返されるオフセットはセグメント・サイズの最小値であり、オフセットは大きいセグメントに対してのみ有効です。 それ以外の場合、不一致はなく、
-1
が返されます。- パラメータ:
other
- このセグメントとの不一致をテストするセグメント- 戻り値:
- このセグメントと指定された他のセグメント間の最初の不一致の相対オフセット(バイト)。不一致がない場合は -1
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalStateException
-other
に関連付けられた「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、other
に関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。
-
isLoaded
boolean isLoaded()このマップされたセグメントの内容が物理メモリーに存在するかどうかを決定します。true
の戻り値は、このセグメント内のすべてのデータが物理メモリーに常駐している可能性が高いため、仮想メモリー・ページ・フォルトやI/O操作を行わずにアクセスできる可能性があることを意味します。 戻り値のfalse
は、このセグメント・コンテンツが物理メモリーに存在していないことを必ずしも意味しません。返される値は、保証ではなくヒントです。これは、基礎となるオペレーティング・システムが、このメソッドを呼び出したときにこのセグメント・データの一部をページアウトしたためです。
- 戻り値:
- このセグメントの内容が物理メモリーに存在する可能性がある場合は
true
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。UnsupportedOperationException
- このセグメントがマップされたメモリー・セグメントでない場合(例:isMapped() == false
)。
-
load
void load()このマップされたセグメントの内容を物理メモリーにロードします。このメソッドを使用すると、このセグメントのこの内容が物理メモリーに常駐していることを確認できます。 このメソッドを呼び出すと、ページ違反や入出力操作が発生する可能性があります。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。UnsupportedOperationException
- このセグメントがマップされたメモリー・セグメントでない場合(例:isMapped() == false
)。
-
unload
void unload()このマップされたセグメントの内容を物理メモリーからアンロードします。このメソッドは、このセグメントのコンテンツが物理メモリーに存在しなくなるように最善の努力をします。 このメソッドを呼び出した後にこのセグメントの内容にアクセスすると、いくつかのページ・フォルトおよびI/O操作が(このセグメント・コンテンツはページ・インする必要がある可能性があるため)に発生する可能性があります。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。UnsupportedOperationException
- このセグメントがマップされたメモリー・セグメントでない場合(例:isMapped() == false
)。
-
force
void force()マップされたセグメント・ファイル記述子によって記述されたストレージ・デバイスに、このマップされたセグメントの内容に加えた変更を強制的に書き込みます。このマップされたセグメントに関連付けられているファイル記述子がローカル・ストレージ・デバイスに存在する場合、このメソッドが返すとき、このセグメントが作成されてからこのセグメントに加えられたすべての変更、またはこのメソッドが最後に呼び出されてから、そのデバイスに書き込まれていることが保証されます。
このマップされたセグメントに関連付けられているファイル記述子がローカル・デバイスに存在しない場合は、そのような保証は行われません。
このセグメントが読取り/書込みモードの(
FileChannel.MapMode.READ_WRITE
)でマップされていない場合、このメソッドを呼び出しても効果がない可能性があります。 特に、このメソッドは、読取り専用またはプライベート・マッピング・モードでマップされたセグメントには影響しません。 このメソッドは、実装固有のマッピング・モードに有効である場合も、そうでない場合もあります。- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。UnsupportedOperationException
- このセグメントがマップされたメモリー・セグメントでない場合(例:isMapped() == false
)。UncheckedIOException
- このセグメントの内容を関連するストレージ・デバイスに書き込むI/Oエラーがある場合
-
asByteBuffer
ByteBuffer asByteBuffer()ByteBuffer
でこのセグメントをラップします。 返されるバッファの一部のプロパティは、このセグメントのプロパティにリンクされます。 たとえば、このセグメントが「不変」 (たとえば、セグメントは読取り専用セグメントです。isReadOnly()
を参照してください)の場合、生成されるバッファはread-only (Buffer.isReadOnly()
を参照してください)です。 また、これがネイティブ・メモリー・セグメントの場合は、結果のバッファはdirect (ByteBuffer.isDirect()
を参照してください)になります。戻されるバッファ位置(
Buffer.position()
を参照してください)は最初はゼロに設定されますが、戻されるバッファ容量および制限(Buffer.capacity()
およびBuffer.limit()
をそれぞれ参照)はこのセグメントのサイズ(byteSize()
を参照してください)に設定されます。 このため、このセグメントのサイズがInteger.MAX_VALUE
より大きい場合、byteバッファは返されません。返されるバッファのライフサイクルは、このセグメントのライフサイクルと関連します。 つまり、このセグメントに関連付けられたメモリー・セッションが(
MemorySession.close()
PREVIEWを参照してください)を閉じた後に返されるバッファにアクセスすると、IllegalStateException
がスローされます。 同様に、スレッドを「所有している」PREVIEW以外のスレッドから戻されたバッファにアクセスすると、このセグメント・メモリー・セッションによってWrongThreadException
がスローされます。このセグメントが制限付きメモリー・セッションに関連付けられている場合、結果のバッファで読み取り/書き込みI/O演算を呼び出すと、未指定の例外がスローされる可能性があります。 このような問題のある操作の例としては、
AsynchronousSocketChannel.read(ByteBuffer)
およびAsynchronousSocketChannel.write(ByteBuffer)
があります。最後に、結果のバッファ・バイト順序は
ByteOrder.BIG_ENDIAN
です。これは、ByteBuffer.order(java.nio.ByteOrder)
を使用して変更できます。- 戻り値:
- このメモリー・セグメントの
ByteBuffer
ビュー。 - 例外:
UnsupportedOperationException
- このセグメントをByteBuffer
インスタンスにマップできない場合(例:byte[]
に基づいていないヒープ・ベースのセグメントをモデル化するため)、またはサイズがInteger.MAX_VALUE
より大きい場合。
-
toArray
byte[] toArray(ValueLayout.OfBytePREVIEW elementLayout) このメモリー・セグメントの内容を新しいバイト配列にコピーします。- パラメータ:
elementLayout
- ソース要素のレイアウト。 レイアウトに関連付けられたバイト順序が「ネイティブ・オーダー」と異なる場合、各配列要素に対してバイト・スワップ演算が実行されます。- 戻り値:
- このメモリー・セグメントから内容がコピーされる新しいバイト配列。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalStateException
- このセグメント・コンテンツをbyte[]
インスタンスにコピーできない場合(サイズがInteger.MAX_VALUE
より大きい場合など)。
-
toArray
short[] toArray(ValueLayout.OfShortPREVIEW elementLayout) このメモリー・セグメントの内容を新しい短い配列にコピーします。- パラメータ:
elementLayout
- ソース要素のレイアウト。 レイアウトに関連付けられたバイト順序が「ネイティブ・オーダー」と異なる場合、各配列要素に対してバイト・スワップ演算が実行されます。- 戻り値:
- このメモリー・セグメントから内容がコピーされる新しい短い配列。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalStateException
- たとえば、このセグメントの内容をshort[]
インスタンス、にコピーできない場合(byteSize() % 2 != 0
またはbyteSize() / 2 > Integer#MAX_VALUE
のため)
-
toArray
char[] toArray(ValueLayout.OfCharPREVIEW elementLayout) このメモリー・セグメントの内容を新しいchar配列にコピーします。- パラメータ:
elementLayout
- ソース要素のレイアウト。 レイアウトに関連付けられたバイト順序が「ネイティブ・オーダー」と異なる場合、各配列要素に対してバイト・スワップ演算が実行されます。- 戻り値:
- このメモリー・セグメントから内容がコピーされる新しいchar配列。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalStateException
- たとえば、byteSize() % 2 != 0
またはbyteSize() / 2 > Integer#MAX_VALUE
のため、このセグメントの内容をchar[]
インスタンスにコピーできない場合。
-
toArray
int[] toArray(ValueLayout.OfIntPREVIEW elementLayout) このメモリー・セグメントの内容を新しいint配列にコピーします。- パラメータ:
elementLayout
- ソース要素のレイアウト。 レイアウトに関連付けられたバイト順序が「ネイティブ・オーダー」と異なる場合、各配列要素に対してバイト・スワップ演算が実行されます。- 戻り値:
- このメモリー・セグメントから内容がコピーされる新しいint配列。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalStateException
- たとえば、byteSize() % 4 != 0
またはbyteSize() / 4 > Integer#MAX_VALUE
のため、このセグメントの内容をint[]
インスタンスにコピーできない場合。
-
toArray
float[] toArray(ValueLayout.OfFloatPREVIEW elementLayout) このメモリー・セグメントの内容を新しい浮動小数配列にコピーします。- パラメータ:
elementLayout
- ソース要素のレイアウト。 レイアウトに関連付けられたバイト順序が「ネイティブ・オーダー」と異なる場合、各配列要素に対してバイト・スワップ演算が実行されます。- 戻り値:
- このメモリー・セグメントから内容がコピーされる新しい浮動小数配列。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalStateException
- たとえば、byteSize() % 4 != 0
またはbyteSize() / 4 > Integer#MAX_VALUE
のため、このセグメントの内容をfloat[]
インスタンスにコピーできない場合。
-
toArray
long[] toArray(ValueLayout.OfLongPREVIEW elementLayout) このメモリー・セグメントの内容を新しい長い配列にコピーします。- パラメータ:
elementLayout
- ソース要素のレイアウト。 レイアウトに関連付けられたバイト順序が「ネイティブ・オーダー」と異なる場合、各配列要素に対してバイト・スワップ演算が実行されます。- 戻り値:
- このメモリー・セグメントから内容がコピーされる新しい長い配列。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalStateException
- たとえば、byteSize() % 8 != 0
またはbyteSize() / 8 > Integer#MAX_VALUE
のため、このセグメントの内容をlong[]
インスタンスにコピーできない場合。
-
toArray
double[] toArray(ValueLayout.OfDoublePREVIEW elementLayout) このメモリー・セグメントの内容を新しい二重配列にコピーします。- パラメータ:
elementLayout
- ソース要素のレイアウト。 レイアウトに関連付けられたバイト順序が「ネイティブ・オーダー」と異なる場合、各配列要素に対してバイト・スワップ演算が実行されます。- 戻り値:
- このメモリー・セグメントから内容がコピーされる新しい二重配列。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalStateException
- たとえば、byteSize() % 8 != 0
またはbyteSize() / 8 > Integer#MAX_VALUE
のため、このセグメントの内容をdouble[]
インスタンスにコピーできない場合。
-
getUtf8String
default String getUtf8String(long offset) 指定されたオフセットでこのセグメントからUTF-8エンコードされたNULL終了文字列を読み取ります。このメソッドは、不正入力シーケンスやマップ不可文字シーケンスを、この文字セットのデフォルトの置換文字列で置き換えます。 デコード処理をより強力に制御する必要がある場合、
CharsetDecoder
クラスを使用する必要があります。- パラメータ:
offset
- オフセット(バイト): (このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この読取り演算の最終アドレスをaddress().toRawLongValue() + offset
として表すことができます。- 戻り値:
- 指定された開始アドレスから読み取られたバイト数から、最初の
'\0'
終了文字(見つかったもの) (含まない)までのJava文字列。 - 例外:
IllegalArgumentException
- UTF-8文字列のサイズがプラットフォームでサポートされる最大の文字列より大きい場合。IndexOutOfBoundsException
-S + offset > byteSize()
の場合、S
はUTF-8文字列(終端文字を含む)のサイズです。IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。
-
setUtf8String
default void setUtf8String(long offset, String str) 指定された文字列を指定されたオフセットでこのセグメントに書き込み、UTF-8エンコーディングを使用してNULLで終了するバイト・シーケンスに変換します。このメソッドは、不正入力シーケンスやマップ不可文字シーケンスを、この文字セットのデフォルトの置換文字列で置き換えます。 デコード処理をより強力に制御する必要がある場合、
CharsetDecoder
クラスを使用する必要があります。指定された文字列に
'\0'
文字が含まれている場合、それらもコピーされます。 つまり、文字列の読取りに使用されたメソッド(getUtf8String(long)
など)に応じて、再度読み取るときに文字列が切り捨てられます。- パラメータ:
offset
- オフセット(バイト): (このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この書込み演算の最終アドレスをaddress().toRawLongValue() + offset
として表すことができます。str
- このセグメントに書き込まれるJava文字列。- 例外:
IndexOutOfBoundsException
-str.getBytes().length() + offset >= byteSize()
の場合。IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。
-
ofBuffer
static MemorySegmentPREVIEW ofBuffer(Buffer buffer) 指定されたBuffer
インスタンスに関連付けられたメモリーをモデル化するバッファ・メモリー・セグメントを作成します。 セグメントはバッファ位置(inclusive)から相対的に始まり、バッファ制限(exclusive)に対して相対的に終わります。バッファがread-onlyの場合、結果のセグメントもread-onlyになります。 このセグメントに関連付けられたメモリー・セッションは、globalPREVIEWメモリー・セッション(バッファが独立して作成された場合)か、
asByteBuffer()
を使用してバッファが取得他のメモリー・セッションのいずれかです。作成されたメモリー・セグメントは、バッキング・バッファへの参照を維持し、「到達可能」のままにします。
- パラメータ:
buffer
- バッファ・メモリー・セグメントを支えるバッファ・インスタンス。- 戻り値:
- バッファ・メモリー・セグメント。
-
ofArray
static MemorySegmentPREVIEW ofArray(byte[] arr) 指定されたヒープ割り当てバイト配列に関連付けられたメモリーをモデル化する配列メモリー・セグメントを作成します。 返されるセグメントは、globalPREVIEWメモリー・セッションに関連付けられます。- パラメータ:
arr
- 配列メモリー・セグメントにバックアップするプリミティブ配列。- 戻り値:
- 配列メモリー・セグメント。
-
ofArray
static MemorySegmentPREVIEW ofArray(char[] arr) 指定されたヒープ割り当てchar配列に関連付けられたメモリーをモデル化する配列メモリー・セグメントを作成します。 返されるセグメントは、globalPREVIEWメモリー・セッションに関連付けられます。- パラメータ:
arr
- 配列メモリー・セグメントにバックアップするプリミティブ配列。- 戻り値:
- 配列メモリー・セグメント。
-
ofArray
static MemorySegmentPREVIEW ofArray(short[] arr) 指定されたヒープ割り当てショート・アレイに関連付けられたメモリーをモデル化するアレイ・メモリー・セグメントを作成します。 返されるセグメントは、globalPREVIEWメモリー・セッションに関連付けられます。- パラメータ:
arr
- 配列メモリー・セグメントにバックアップするプリミティブ配列。- 戻り値:
- 配列メモリー・セグメント。
-
ofArray
static MemorySegmentPREVIEW ofArray(int[] arr) - パラメータ:
arr
- 配列メモリー・セグメントにバックアップするプリミティブ配列。- 戻り値:
- 配列メモリー・セグメント。
-
ofArray
static MemorySegmentPREVIEW ofArray(float[] arr) 指定されたヒープ割り当てフロート配列に関連付けられたメモリーをモデル化する配列メモリー・セグメントを作成します。 返されるセグメントは、globalPREVIEWメモリー・セッションに関連付けられます。- パラメータ:
arr
- 配列メモリー・セグメントにバックアップするプリミティブ配列。- 戻り値:
- 配列メモリー・セグメント。
-
ofArray
static MemorySegmentPREVIEW ofArray(long[] arr) - パラメータ:
arr
- 配列メモリー・セグメントにバックアップするプリミティブ配列。- 戻り値:
- 配列メモリー・セグメント。
-
ofArray
static MemorySegmentPREVIEW ofArray(double[] arr) 指定されたヒープ割り当て倍精度配列に関連付けられたメモリーをモデル化する配列メモリー・セグメントを作成します。 返されるセグメントは、globalPREVIEWメモリー・セッションに関連付けられます。- パラメータ:
arr
- 配列メモリー・セグメントにバックアップするプリミティブ配列。- 戻り値:
- 配列メモリー・セグメント。
-
ofAddress
static MemorySegmentPREVIEW ofAddress(MemoryAddressPREVIEW address, long bytesSize, MemorySessionPREVIEW session) 指定されたサイズ、ベース・アドレス、およびメモリー・セッションでネイティブ・メモリー・セグメントを作成します。 このメソッドは、カスタム・メモリー・ソース(たとえば、カスタム・ロケータ)と相互作用する場合に便利です。基礎となるメモリー・リージョンへのアドレスは通常、外部コード(プレーンlong
値として使用されることが多い)から取得されます。返されるセグメントは読取り専用(
isReadOnly()
を参照してください)ではなく、指定されたメモリー・セッションに関連付けられます。クライアントは、アドレスと境界が、読み取りおよび適切な場合は書き込みのためにアクセス可能な有効なメモリー・リージョンを参照していることを確認する必要があります。Javaコードから無効なメモリーのロケーションにアクセスしようとすると、任意の値が返されるか、可視効果がないか、または指定されていない例外がスローされます。
このメソッドは「制限付き」です。 制限されたメソッドは安全ではなく、誤って使用するとJVMがクラッシュしたり、悪化したりするとメモリーが破損する可能性があります。 したがって、クライアントは制限付きメソッドに応じて屈折し、可能な場合は安全でサポートされている機能を使用する必要があります。
- パラメータ:
address
- 返されるセグメントのベース・アドレス。bytesSize
- 目的のサイズ。session
- ネイティブ・セグメント・メモリー・セッション。- 戻り値:
- 指定されたベース・アドレス、サイズ、およびメモリー・セッションを持つネイティブ・メモリー・セグメント。
- 例外:
IllegalArgumentException
-bytesSize < 0
の場合。IllegalStateException
-session
がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、session
を「所有している」PREVIEWスレッド以外のスレッドからコールされる場合。IllegalCallerException
- このメソッドへのアクセスがモジュールM
から発生し、コマンドライン・オプション--enable-native-access
が指定されているが、モジュール名M
、またはM
が無名モジュールの場合はALL-UNNAMED
が指定されていない場合。
-
allocateNative
static MemorySegmentPREVIEW allocateNative(MemoryLayoutPREVIEW layout, MemorySessionPREVIEW session) 指定されたレイアウトおよびメモリー・セッションでネイティブ・メモリー・セグメントを作成します。 クライアントは、セグメントが使用されなくなったときに、返されたセグメントに関連付けられたメモリー・セッションが閉じられるようにします。 これを行わなかった場合、ヒープ外のメモリー・リークが発生します。これは次のコードと等価です。
allocateNative(layout.bytesSize(), layout.bytesAlignment(), session);
返されたネイティブ・メモリー・セグメントに関連するoff-heapメモリーのブロックは、ゼロに初期化されます。
- パラメータ:
layout
- ネイティブ・メモリー・セグメントのバッキングの非ヒープ・メモリー・ブロックのレイアウト。session
- セグメント・メモリー・セッション。- 戻り値:
- 新しいネイティブ・メモリー・セグメント。
- 例外:
IllegalStateException
-session
がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、session
を「所有している」PREVIEWスレッド以外のスレッドからコールされる場合。
-
allocateNative
static MemorySegmentPREVIEW allocateNative(long bytesSize, MemorySessionPREVIEW session) 指定されたサイズ(バイト単位)およびメモリー・セッションでネイティブ・メモリー・セグメントを作成します。 クライアントは、セグメントが使用されなくなったときに、返されたセグメントに関連付けられたメモリー・セッションが閉じられるようにします。 これを行わなかった場合、ヒープ外のメモリー・リークが発生します。これは次のコードと等価です。
allocateNative(bytesSize, 1, session);
返されたネイティブ・メモリー・セグメントに関連するoff-heapメモリーのブロックは、ゼロに初期化されます。
- パラメータ:
bytesSize
- ネイティブ・メモリー・セグメントのバッキングのヒープ外メモリー・ブロックのサイズ(バイト単位)。session
- セグメントの一時的な境界。- 戻り値:
- 新しいネイティブ・メモリー・セグメント。
- 例外:
IllegalArgumentException
-bytesSize < 0
の場合。IllegalStateException
-session
がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、session
を「所有している」PREVIEWスレッド以外のスレッドからコールされる場合。
-
allocateNative
static MemorySegmentPREVIEW allocateNative(long bytesSize, long alignmentBytes, MemorySessionPREVIEW session) 指定されたサイズ(バイト単位)、整列制約(バイト単位)およびメモリー・セッションでネイティブ・メモリー・セグメントを作成します。 クライアントは、セグメントが使用されなくなったときに、返されたセグメントに関連付けられたメモリー・セッションが閉じられるようにします。 これを行わなかった場合、ヒープ外のメモリー・リークが発生します。返されたネイティブ・メモリー・セグメントに関連するoff-heapメモリーのブロックは、ゼロに初期化されます。
- パラメータ:
bytesSize
- ネイティブ・メモリー・セグメントのバッキングのヒープ外メモリー・ブロックのサイズ(バイト単位)。alignmentBytes
- ネイティブ・メモリー・セグメントのバッキングのヒープ外メモリー・ブロックの位置合せ制約(バイト単位)。session
- セグメント・メモリー・セッション。- 戻り値:
- 新しいネイティブ・メモリー・セグメント。
- 例外:
IllegalArgumentException
-bytesSize < 0
、alignmentBytes <= 0
またはalignmentBytes
が2の累乗でない場合。IllegalStateException
-session
がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、session
を「所有している」PREVIEWスレッド以外のスレッドからコールされる場合。
-
copy
static void copy(MemorySegmentPREVIEW srcSegment, long srcOffset, MemorySegmentPREVIEW dstSegment, long dstOffset, long bytes) ソース・セグメントから宛先セグメントへの一括コピーを実行します。 特に、ソース・セグメントのオフセットsrcOffset
からsrcOffset + bytes - 1
のバイトは、オフセットdstOffset
からdstOffset + bytes - 1
の宛先セグメントにコピーされます。ソース・セグメントがこのセグメントと重複する場合、コピーは、ソース・セグメントのオフセット
srcOffset
からsrcOffset + bytes - 1
のバイトが最初にサイズbytes
の一時セグメントにコピーされたかのように実行され、一時セグメントの内容はオフセットdstOffset
からdstOffset + bytes - 1
で宛先セグメントにコピーされました。一括コピーの結果は、通常の場合、ソース・セグメントと宛先セグメントが重複せず、異なるアドレスを使用して同じバッキング・ストレージの重複するリージョンを参照する場合に指定されません。 たとえば、同じファイルが複数のセグメントに対して「マップ済」である場合に発生することがあります。
このメソッドの呼出しは、次のコードと同じです:
MemorySegment.copy(srcSegment, ValueLayout.JAVA_BYTE, srcOffset, dstSegment, ValueLayout.JAVA_BYTE, dstOffset, bytes);
- パラメータ:
srcSegment
- ソース・セグメント。srcOffset
- ソース・セグメントの開始オフセット(バイト単位)。dstSegment
- 宛先セグメント。dstOffset
- 宛先セグメントの開始オフセット(バイト単位)。bytes
- コピーされるバイト数。- 例外:
IllegalStateException
-srcSegment
に関連付けられた「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、srcSegment
に関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalStateException
-dstSegment
に関連付けられた「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、dstSegment
に関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IndexOutOfBoundsException
-srcOffset + bytes > srcSegment.byteSize()
またはdstOffset + bytes > dstSegment.byteSize()
の場合、またはsrcOffset
、dstOffset
またはbytes
のいずれかが< 0
の場合。UnsupportedOperationException
- 宛先セグメントが読取り専用(isReadOnly()
を参照してください)の場合。
-
copy
static void copy(MemorySegmentPREVIEW srcSegment, ValueLayoutPREVIEW srcElementLayout, long srcOffset, MemorySegmentPREVIEW dstSegment, ValueLayoutPREVIEW dstElementLayout, long dstOffset, long elementCount) ソース・セグメントから宛先セグメントへの一括コピーを実行します。 特に、S
が要素レイアウトのバイト・サイズである場合、ソース・セグメントのオフセットsrcOffset
からsrcOffset + (elementCount * S) - 1
のバイトは、オフセットdstOffset
からdstOffset + (elementCount * S) - 1
の宛先セグメントにコピーされます。コピーはエレメント・ワイズ方式で行われます: ソース・セグメントのバイトは、レイアウトが
srcElementLayout
である要素のシーケンスとして解釈されますが、宛先セグメントのバイトは、レイアウトがdstElementLayout
である要素のシーケンスとして解釈されます。 どちらの要素レイアウトも、同じサイズS
である必要があります。 2つの要素レイアウトのバイト順序が異なる場合、コピーする各要素に対応するバイトは、コピー操作中にそれに応じてスワップされます。ソース・セグメントがこのセグメントと重複する場合、コピーは、ソース・セグメントのオフセット
srcOffset
からsrcOffset + (elementCount * S) - 1
のバイトが最初にサイズbytes
の一時セグメントにコピーされたかのように実行され、一時セグメントの内容はオフセットdstOffset
からdstOffset + (elementCount * S) - 1
で宛先セグメントにコピーされました。一括コピーの結果は、通常の場合、ソース・セグメントと宛先セグメントが重複せず、異なるアドレスを使用して同じバッキング・ストレージの重複するリージョンを参照する場合に指定されません。 たとえば、同じファイルが複数のセグメントに対して「マップ済」である場合に発生することがあります。
- パラメータ:
srcSegment
- ソース・セグメント。srcElementLayout
- ソース・セグメントに関連付けられたエレメント・レイアウト。srcOffset
- ソース・セグメントの開始オフセット(バイト単位)。dstSegment
- 宛先セグメント。dstElementLayout
- 宛先セグメントに関連付けられた要素レイアウト。dstOffset
- 宛先セグメントの開始オフセット(バイト単位)。elementCount
- コピーする要素の数。- 例外:
IllegalArgumentException
- 要素レイアウトのサイズが異なる場合、ソース(resp.宛先)要素レイアウトのソース(resp.宛先)セグメント/オフセットが「線形拘束と互換性がありません」の場合、またはソース(resp.宛先)要素のレイアウトの配置がサイズより大きい場合。IllegalStateException
-srcSegment
に関連付けられた「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このsrcSegment
に関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalStateException
-dstSegment
に関連付けられた「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、dstSegment
に関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IndexOutOfBoundsException
-srcOffset + (elementCount * S) > srcSegment.byteSize()
の場合、またはdstOffset + (elementCount * S) > dstSegment.byteSize()
の場合(S
は要素レイアウトのバイト・サイズ、またはsrcOffset
、dstOffset
またはelementCount
のいずれかが< 0
の場合)。UnsupportedOperationException
- 宛先セグメントが読取り専用(isReadOnly()
を参照してください)の場合。
-
get
default byte get(ValueLayout.OfBytePREVIEW layout, long offset) 指定されたレイアウトで、指定されたオフセットでこのセグメントからバイトを読み取ります。- パラメータ:
layout
- 読み取るメモリー・リージョンのレイアウト。offset
- オフセット(バイト): (このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この読取り演算の最終アドレスをaddress().toRawLongValue() + offset
として表すことができます。- 戻り値:
- このアドレスから読み取られたバイト値。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。
-
set
default void set(ValueLayout.OfBytePREVIEW layout, long offset, byte value) 指定されたレイアウトを使用して、指定されたオフセットでこのセグメントにバイトを書き込みます。- パラメータ:
layout
- 書き込まれるメモリー・リージョンのレイアウト。offset
- オフセット(バイト): (このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この書込み演算の最終アドレスをaddress().toRawLongValue() + offset
として表すことができます。value
- 書き込まれるbyte値。- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。UnsupportedOperationException
- このセグメントがread-onlyの場合。
-
get
default boolean get(ValueLayout.OfBooleanPREVIEW layout, long offset) 指定されたオフセットを使用して、このセグメントからブールを読み取ります。- パラメータ:
layout
- 読み取るメモリー・リージョンのレイアウト。offset
- オフセット(バイト): (このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この読取り演算の最終アドレスをaddress().toRawLongValue() + offset
として表すことができます。- 戻り値:
- このアドレスから読み取られるブール値。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。
-
set
default void set(ValueLayout.OfBooleanPREVIEW layout, long offset, boolean value) 指定されたレイアウトを使用して、指定されたオフセットでこのセグメントにブール値を書き込みます。- パラメータ:
layout
- 書き込まれるメモリー・リージョンのレイアウト。offset
- オフセット(バイト): (このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この書込み演算の最終アドレスをaddress().toRawLongValue() + offset
として表すことができます。value
- 書き込まれるブール値。- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。UnsupportedOperationException
- このセグメントがread-onlyの場合。
-
get
default char get(ValueLayout.OfCharPREVIEW layout, long offset) 指定されたレイアウトで、指定されたオフセットでこのセグメントからcharを読み取ります。- パラメータ:
layout
- 読み取るメモリー・リージョンのレイアウト。offset
- オフセット(バイト): (このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この読取り演算の最終アドレスをaddress().toRawLongValue() + offset
として表すことができます。- 戻り値:
- このアドレスから読み取られるchar値。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。
-
set
default void set(ValueLayout.OfCharPREVIEW layout, long offset, char value) 指定されたレイアウトを使用して、指定されたオフセットでこのセグメントに文字を書き込みます。- パラメータ:
layout
- 書き込まれるメモリー・リージョンのレイアウト。offset
- オフセット(バイト): (このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この書込み演算の最終アドレスをaddress().toRawLongValue() + offset
として表すことができます。value
- 書き込まれるchar値。- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。UnsupportedOperationException
- このセグメントがread-onlyの場合。
-
get
default short get(ValueLayout.OfShortPREVIEW layout, long offset) 指定されたレイアウトで、指定されたオフセットでこのセグメントからshortを読み取ります。- パラメータ:
layout
- 読み取るメモリー・リージョンのレイアウト。offset
- オフセット(バイト): (このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この読取り演算の最終アドレスをaddress().toRawLongValue() + offset
として表すことができます。- 戻り値:
- このアドレスから読み取られる短い値。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。
-
set
default void set(ValueLayout.OfShortPREVIEW layout, long offset, short value) 指定されたレイアウトを使用して、指定されたオフセットでこのセグメントにshortを書き込みます。- パラメータ:
layout
- 書き込まれるメモリー・リージョンのレイアウト。offset
- オフセット(バイト): (このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この書込み演算の最終アドレスをaddress().toRawLongValue() + offset
として表すことができます。value
- 書き込まれるshort値。- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。UnsupportedOperationException
- このセグメントがread-onlyの場合。
-
get
default int get(ValueLayout.OfIntPREVIEW layout, long offset) 指定されたレイアウトを使用して、指定されたオフセットでこのセグメントからintを読み取ります。- パラメータ:
layout
- 読み取るメモリー・リージョンのレイアウト。offset
- オフセット(バイト): (このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この読取り演算の最終アドレスをaddress().toRawLongValue() + offset
として表すことができます。- 戻り値:
- このアドレスから読み取られるint値。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。
-
set
default void set(ValueLayout.OfIntPREVIEW layout, long offset, int value) 指定されたレイアウトを使用して、指定されたオフセットでこのセグメントにintを書き込みます。- パラメータ:
layout
- 書き込まれるメモリー・リージョンのレイアウト。offset
- オフセット(バイト): (このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この書込み演算の最終アドレスをaddress().toRawLongValue() + offset
として表すことができます。value
- 書き込まれるint値。- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。UnsupportedOperationException
- このセグメントがread-onlyの場合。
-
get
default float get(ValueLayout.OfFloatPREVIEW layout, long offset) 指定されたレイアウトを使用して、指定されたオフセットでこのセグメントからフロートを読み取ります。- パラメータ:
layout
- 読み取るメモリー・リージョンのレイアウト。offset
- オフセット(バイト): (このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この読取り演算の最終アドレスをaddress().toRawLongValue() + offset
として表すことができます。- 戻り値:
- このアドレスから読み取られる浮動小数点値。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。
-
set
default void set(ValueLayout.OfFloatPREVIEW layout, long offset, float value) 指定されたレイアウトを使用して、指定されたオフセットでこのセグメントにフロートを書き込みます。- パラメータ:
layout
- 書き込まれるメモリー・リージョンのレイアウト。offset
- オフセット(バイト): (このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この書込み演算の最終アドレスをaddress().toRawLongValue() + offset
として表すことができます。value
- 書き込まれるfloat値。- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。UnsupportedOperationException
- このセグメントがread-onlyの場合。
-
get
default long get(ValueLayout.OfLongPREVIEW layout, long offset) 指定されたレイアウトを使用して、指定されたオフセットでこのセグメントからlongを読み取ります。- パラメータ:
layout
- 読み取るメモリー・リージョンのレイアウト。offset
- オフセット(バイト): (このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この読取り演算の最終アドレスをaddress().toRawLongValue() + offset
として表すことができます。- 戻り値:
- このアドレスから読み取られる長い値。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。
-
set
default void set(ValueLayout.OfLongPREVIEW layout, long offset, long value) 指定されたレイアウトを使用して、指定されたオフセットでこのセグメントにlongを書き込みます。- パラメータ:
layout
- 書き込まれるメモリー・リージョンのレイアウト。offset
- オフセット(バイト): (このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この書込み演算の最終アドレスをaddress().toRawLongValue() + offset
として表すことができます。value
- 書き込まれるlong値。- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。UnsupportedOperationException
- このセグメントがread-onlyの場合。
-
get
default double get(ValueLayout.OfDoublePREVIEW layout, long offset) 指定されたレイアウトで、指定されたオフセットでこのセグメントから倍精度浮動小数点数を読み取ります。- パラメータ:
layout
- 読み取るメモリー・リージョンのレイアウト。offset
- オフセット(バイト): (このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この読取り演算の最終アドレスをaddress().toRawLongValue() + offset
として表すことができます。- 戻り値:
- このアドレスから読み取られる二重値。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。
-
set
default void set(ValueLayout.OfDoublePREVIEW layout, long offset, double value) 指定されたレイアウトを使用して、指定されたオフセットでこのセグメントにdoubleを書き込みます。- パラメータ:
layout
- 書き込まれるメモリー・リージョンのレイアウト。offset
- オフセット(バイト): (このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この書込み演算の最終アドレスをaddress().toRawLongValue() + offset
として表すことができます。value
- 書き込まれるdouble値。- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。UnsupportedOperationException
- このセグメントがread-onlyの場合。
-
get
default MemoryAddressPREVIEW get(ValueLayout.OfAddressPREVIEW layout, long offset) 指定されたレイアウトで、指定されたオフセットでこのセグメントからアドレスを読み取ります。- パラメータ:
layout
- 読み取るメモリー・リージョンのレイアウト。offset
- オフセット(バイト): (このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この読取り演算の最終アドレスをaddress().toRawLongValue() + offset
として表すことができます。- 戻り値:
- このアドレスから読み取られたアドレス値。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。
-
set
default void set(ValueLayout.OfAddressPREVIEW layout, long offset, AddressablePREVIEW value) 指定されたレイアウトを使用して、指定されたオフセットでこのセグメントにアドレスを書き込みます。- パラメータ:
layout
- 書き込まれるメモリー・リージョンのレイアウト。offset
- オフセット(バイト): (このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この書込み演算の最終アドレスをaddress().toRawLongValue() + offset
として表すことができます。value
- 書き込まれるアドレス値。- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。UnsupportedOperationException
- このセグメントがread-onlyの場合。
-
getAtIndex
default char getAtIndex(ValueLayout.OfCharPREVIEW layout, long index) 指定された索引のこのセグメントから、指定されたレイアウト・サイズで拡大縮小されたcharを読み取ります。- パラメータ:
layout
- 読み取るメモリー・リージョンのレイアウト。index
- 索引(このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この読取り演算の最終アドレスをaddress().toRawLongValue() + (index * layout.byteSize())
として表すことができます。- 戻り値:
- このアドレスから読み取られるchar値。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合、またはレイアウト配置がそのサイズより大きい場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。
-
setAtIndex
default void setAtIndex(ValueLayout.OfCharPREVIEW layout, long index, char value) 指定された索引で、指定されたレイアウト・サイズでスケールされたcharをこのセグメントに書き込みます。- パラメータ:
layout
- 書き込まれるメモリー・リージョンのレイアウト。index
- 索引(このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この書込み演算の最終アドレスをaddress().toRawLongValue() + (index * layout.byteSize())
として表すことができます。value
- 書き込まれるchar値。- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合、またはレイアウト配置がそのサイズより大きい場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。UnsupportedOperationException
- このセグメントがread-onlyの場合。
-
getAtIndex
default short getAtIndex(ValueLayout.OfShortPREVIEW layout, long index) 指定された索引のこのセグメントから、指定されたレイアウト・サイズでスケールされたshortを読み取ります。- パラメータ:
layout
- 読み取るメモリー・リージョンのレイアウト。index
- 索引(このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この読取り演算の最終アドレスをaddress().toRawLongValue() + (index * layout.byteSize())
として表すことができます。- 戻り値:
- このアドレスから読み取られる短い値。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合、またはレイアウト配置がそのサイズより大きい場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。
-
setAtIndex
default void setAtIndex(ValueLayout.OfShortPREVIEW layout, long index, short value) 指定された索引で、指定されたレイアウト・サイズでスケールされたこのセグメントにshortを書き込みます。- パラメータ:
layout
- 書き込まれるメモリー・リージョンのレイアウト。index
- 索引(このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この書込み演算の最終アドレスをaddress().toRawLongValue() + (index * layout.byteSize())
として表すことができます。value
- 書き込まれるshort値。- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合、またはレイアウト配置がそのサイズより大きい場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。UnsupportedOperationException
- このセグメントがread-onlyの場合。
-
getAtIndex
default int getAtIndex(ValueLayout.OfIntPREVIEW layout, long index) 指定されたレイアウト・サイズでスケールされた、指定された索引のこのセグメントからintを読み取ります。- パラメータ:
layout
- 読み取るメモリー・リージョンのレイアウト。index
- 索引(このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この読取り演算の最終アドレスをaddress().toRawLongValue() + (index * layout.byteSize())
として表すことができます。- 戻り値:
- このアドレスから読み取られるint値。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合、またはレイアウト配置がそのサイズより大きい場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。
-
setAtIndex
default void setAtIndex(ValueLayout.OfIntPREVIEW layout, long index, int value) 指定された索引で、指定されたレイアウト・サイズでスケールされたintをこのセグメントに書き込みます。- パラメータ:
layout
- 書き込まれるメモリー・リージョンのレイアウト。index
- 索引(このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この書込み演算の最終アドレスをaddress().toRawLongValue() + (index * layout.byteSize())
として表すことができます。value
- 書き込まれるint値。- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合、またはレイアウト配置がそのサイズより大きい場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。UnsupportedOperationException
- このセグメントがread-onlyの場合。
-
getAtIndex
default float getAtIndex(ValueLayout.OfFloatPREVIEW layout, long index) 指定された索引のこのセグメントからフロートを読み取り、指定されたレイアウト・サイズでスケールします。- パラメータ:
layout
- 読み取るメモリー・リージョンのレイアウト。index
- 索引(このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この読取り演算の最終アドレスをaddress().toRawLongValue() + (index * layout.byteSize())
として表すことができます。- 戻り値:
- このアドレスから読み取られる浮動小数点値。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合、またはレイアウト配置がそのサイズより大きい場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。
-
setAtIndex
default void setAtIndex(ValueLayout.OfFloatPREVIEW layout, long index, float value) 指定された索引でこのセグメントにフロートを書き込み、指定されたレイアウト・サイズでスケールします。- パラメータ:
layout
- 書き込まれるメモリー・リージョンのレイアウト。index
- 索引(このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この書込み演算の最終アドレスをaddress().toRawLongValue() + (index * layout.byteSize())
として表すことができます。value
- 書き込まれるfloat値。- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合、またはレイアウト配置がそのサイズより大きい場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。UnsupportedOperationException
- このセグメントがread-onlyの場合。
-
getAtIndex
default long getAtIndex(ValueLayout.OfLongPREVIEW layout, long index) 指定された索引でこのセグメントから、指定されたレイアウト・サイズでスケールされたlongを読み取ります。- パラメータ:
layout
- 読み取るメモリー・リージョンのレイアウト。index
- 索引(このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この読取り演算の最終アドレスをaddress().toRawLongValue() + (index * layout.byteSize())
として表すことができます。- 戻り値:
- このアドレスから読み取られる長い値。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合、またはレイアウト配置がそのサイズより大きい場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。
-
setAtIndex
default void setAtIndex(ValueLayout.OfLongPREVIEW layout, long index, long value) 指定された索引で、所定のレイアウト・サイズでスケールされたlongをこのセグメントに書き込みます。- パラメータ:
layout
- 書き込まれるメモリー・リージョンのレイアウト。index
- 索引(このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この書込み演算の最終アドレスをaddress().toRawLongValue() + (index * layout.byteSize())
として表すことができます。value
- 書き込まれるlong値。- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合、またはレイアウト配置がそのサイズより大きい場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。UnsupportedOperationException
- このセグメントがread-onlyの場合。
-
getAtIndex
default double getAtIndex(ValueLayout.OfDoublePREVIEW layout, long index) 指定された索引で、指定されたレイアウト・サイズで倍精度浮動小数点数を読み取ります。- パラメータ:
layout
- 読み取るメモリー・リージョンのレイアウト。index
- 索引(このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この読取り演算の最終アドレスをaddress().toRawLongValue() + (index * layout.byteSize())
として表すことができます。- 戻り値:
- このアドレスから読み取られる二重値。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合、またはレイアウト配置がそのサイズより大きい場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。
-
setAtIndex
default void setAtIndex(ValueLayout.OfDoublePREVIEW layout, long index, double value) 指定された索引で、指定されたレイアウト・サイズでスケールされた倍精度浮動小数点数をこのセグメントに書き込みます。- パラメータ:
layout
- 書き込まれるメモリー・リージョンのレイアウト。index
- 索引(このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この書込み演算の最終アドレスをaddress().toRawLongValue() + (index * layout.byteSize())
として表すことができます。value
- 書き込まれるdouble値。- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合、またはレイアウト配置がそのサイズより大きい場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。UnsupportedOperationException
- このセグメントがread-onlyの場合。
-
getAtIndex
default MemoryAddressPREVIEW getAtIndex(ValueLayout.OfAddressPREVIEW layout, long index) 指定された索引で、指定されたレイアウト・サイズでスケールされたアドレスをこのセグメントから読み取ります。- パラメータ:
layout
- 読み取るメモリー・リージョンのレイアウト。index
- 索引(このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この読取り演算の最終アドレスをaddress().toRawLongValue() + (index * layout.byteSize())
として表すことができます。- 戻り値:
- このアドレスから読み取られたアドレス値。
- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合、またはレイアウト配置がそのサイズより大きい場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。
-
setAtIndex
default void setAtIndex(ValueLayout.OfAddressPREVIEW layout, long index, AddressablePREVIEW value) 指定された索引で、指定されたレイアウト・サイズでスケールされたアドレスをこのセグメントに書き込みます。- パラメータ:
layout
- 書き込まれるメモリー・リージョンのレイアウト。index
- 索引(このセグメントに対する相対値)。 たとえば、このセグメントが「ネイティブ」セグメントの場合、この書込み演算の最終アドレスをaddress().toRawLongValue() + (index * layout.byteSize())
として表すことができます。value
- 書き込まれるアドレス値。- 例外:
IllegalStateException
- このセグメントに関連付けられている「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、このセグメントに関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
- 指定されたレイアウトで間接参照操作が「線形拘束と互換性がありません」の場合、またはレイアウト配置がそのサイズより大きい場合。IndexOutOfBoundsException
- 間接参照操作がメモリー・セグメントの「空間境界」の外側にある場合。UnsupportedOperationException
- このセグメントがread-onlyの場合。
-
equals
boolean equals(Object that) 指定されたオブジェクトをこのメモリー・セグメントと比較し、等しいかどうかを調べます。 指定されたオブジェクトがメモリー・セグメントでもある場合、およびそのセグメントがこのセグメントと同じメモリー・リージョンを参照している場合にのみ、true
を返します。 さらに具体的には、2つのセグメントを等しいとみなすには、次のすべてを満たす必要があります:- 2つのセグメントは同じ種類である必要があります。両方とも「ネイティブ・セグメント」、オフ・ヒープ・メモリーによってバックアップされるか、両方がヒープ・メモリーによってバックアップされます
- 2つのセグメントが「ネイティブ・セグメント」の場合、その
base address
はequalPREVIEWである必要があります。 それ以外の場合、2つのセグメントは同じJava配列インスタンスを同じ開始オフセットでラップする必要があります - 2つのセグメントが同じsizeを持つ必要があります
- 2つのセグメントには、samePREVIEW 「一時的な境界」が必要です。
- オーバーライド:
equals
、クラスObject
- APIのノート:
- このメソッドでは、2つのメモリー・セグメントの内容の構造比較は実行されません。 クライアントは、かわりに
mismatch(MemorySegment)
メソッドを使用してメモリー・セグメントを構造的に比較できます。 - パラメータ:
that
- このメモリー・セグメントとの等価性を比較するオブジェクト。- 戻り値:
- 指定されたオブジェクトがこのメモリー・セグメントと等しい場合は、
true
。 - 関連項目:
-
hashCode
int hashCode()このメモリー・セグメントのハッシュ・コード値を返します。 -
copy
static void copy(MemorySegmentPREVIEW srcSegment, ValueLayoutPREVIEW srcLayout, long srcOffset, Object dstArray, int dstIndex, int elementCount) ソース・メモリー・セグメントから宛先配列に多数の要素をコピーします。 指定されたレイアウトによってサイズおよび整列制約が指定されている要素は、指定されたオフセット(バイトで表されます。)からソース・セグメントから読み取られ、指定された索引で宛先配列にコピーされます。 サポートされる配列タイプは、byte[]
,char[]
,short[]
,int[]
,float[]
,long[]
およびdouble[]
です。- パラメータ:
srcSegment
- ソース・セグメント。srcLayout
- ソース要素のレイアウト。 レイアウトに関連付けられたバイト順序が「ネイティブ・オーダー」と異なる場合、各配列要素に対してバイト・スワップ演算が実行されます。srcOffset
- ソース・セグメントの開始オフセット(バイト単位)。dstArray
- 宛先配列。dstIndex
- 宛先配列の開始索引。elementCount
- コピーする配列要素の数。- 例外:
IllegalStateException
-srcSegment
に関連付けられた「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、srcSegment
に関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
-dstArray
が配列ではない場合、またはデータ型がサポートされていない配列である場合、宛先配列コンポーネント・タイプがソース要素レイアウトのキャリアと一致しない場合、ソース要素レイアウトのソース・セグメント/オフセットが「線形拘束と互換性がありません」である場合、または宛先要素レイアウトの配置がそのサイズより大きい場合。
-
copy
static void copy(Object srcArray, int srcIndex, MemorySegmentPREVIEW dstSegment, ValueLayoutPREVIEW dstLayout, long dstOffset, int elementCount) ソース配列から宛先メモリー・セグメントに多数の要素をコピーします。 指定されたレイアウトによってサイズおよび整列制約が指定されている要素は、指定された索引から開始してソース配列から読み取られ、指定されたオフセット(バイトで表されます。)で宛先セグメントにコピーされます。 サポートされる配列タイプは、byte[]
,char[]
,short[]
,int[]
,float[]
,long[]
およびdouble[]
です。- パラメータ:
srcArray
- ソース配列。srcIndex
- ソース配列の開始インデックス。dstSegment
- 宛先セグメント。dstLayout
- 宛先要素レイアウト。 レイアウトに関連付けられたバイト順序が「ネイティブ・オーダー」と異なる場合、各配列要素に対してバイト・スワップ演算が実行されます。dstOffset
- 宛先セグメントの開始オフセット(バイト単位)。elementCount
- コピーする配列要素の数。- 例外:
IllegalStateException
-dstSegment
に関連付けられた「セッション」がalivePREVIEWでない場合。WrongThreadException
- このメソッドが、dstSegment
に関連付けられた「セッション」を所有するスレッド以外のスレッドからコールされる場合。IllegalArgumentException
-srcArray
が配列でない場合、またはそれが配列であり、その型がサポートされていない場合、ソース配列コンポーネント・タイプが宛先要素レイアウトのキャリアと一致しない場合、宛先要素レイアウトで宛先セグメント/オフセットが「線形拘束と互換性がありません」の場合、または宛先要素レイアウトの配置がそのサイズより大きい場合。
-
MemorySegment
を使用できます。