- すべてのスーパー・インタフェース:
AutoCloseable
,MemorySegment
public interface MappedMemorySegment extends MemorySegment
マップされたメモリー・セグメントは、MemorySegment.mapFromPath(Path, long, long, FileChannel.MapMode)
を介して作成されます。 マップされたメモリー・セグメントは通常のセグメントと同様に動作しますが、force()
やload()
など、メモリーにマップされたメモリー・リージョンを操作するための追加機能を提供します。
このインタフェースのすべての実装はvalue-basedである必要があります。MemoryLayout
のインスタンスでアイデンティティに依存する操作(参照の等価性の(==
)、アイデンティティ・ハッシュ・コード、同期化など)を使用すると、予期しない結果が生じる可能性があるため、使用しないでください。 比較する場合は、equals
メソッドを使用することをお薦めします。
非プラットフォーム・クラスは、MappedMemorySegmentを直接実装することはできません。
マップされたメモリー・セグメントの内容は、マップされたファイルの対応するリージョンの内容がこの(または別の)プログラムによって変更される場合など、いつでも変更できます。 こうした変更が発生するかどうか、またどのタイミングで発生するかは、オペレーティング・システムによって異なるため、未指定です。 マップされたメモリー・セグメントのすべてまたは一部は、バッキング・マップ・ファイルが切り捨てられた場合など、いつでもアクセスできなくなる可能性があります。 マップされたメモリー・セグメントのアクセス不可能なリージョンにアクセスしようとしても、セグメントの内容は変更されず、アクセス時または後で未指定の例外がスローされます。 したがって、ファイルの内容の読取りまたは書込みを除き、この(または別の)プログラムによるマップ済ファイルの操作を回避するために、適切な注意を払うことを強くお薦めします。
- APIのノート:
- 将来、Java言語で許可される場合、
MemorySegment
はsealed
インタフェースになり、明示的に許可されたサブタイプを除いてサブクラス化が禁止される可能性があります。
-
フィールドのサマリー
インタフェースjdk.incubator.foreign.MemorySegmentで宣言されているフィールド
ACQUIRE, ALL_ACCESS, CLOSE, HANDOFF, READ, WRITE
-
メソッドのサマリー
修飾子と型 メソッド 説明 MappedMemorySegment
asSlice(long offset, long newSize)
ベース・アドレスがこのセグメントのベース・アドレスと指定されたオフセットに加えて、指定の引数で新しいサイズが指定されている、新しいメモリー・セグメントのビューを取得します。void
force()
このセグメント・コンテンツに加えられた変更を、マップされたファイルを含むストレージ・デバイスに強制的に書き込みます。boolean
isLoaded()
このセグメント・コンテンツが物理メモリーに存在するかどうかを判断します。void
load()
このセグメント・コンテンツを物理メモリーにロードします。void
unload()
このセグメント・コンテンツを物理メモリーからアンロードします。MappedMemorySegment
withAccessModes(int accessModes)
特定の「アクセス・モード」を持つセグメント・ビューを取得します。インタフェースjdk.incubator.foreign.MemorySegmentで宣言されたメソッド
accessModes, asByteBuffer, baseAddress, byteSize, close, copyFrom, fill, hasAccessModes, isAlive, mismatch, ownerThread, toByteArray, withOwnerThread
-
メソッドの詳細
-
withAccessModes
MappedMemorySegment withAccessModes(int accessModes)インタフェースからコピーされた説明:MemorySegment
特定の「アクセス・モード」を持つセグメント・ビューを取得します。 サポートされているアクセス・モードは、MemorySegment.READ
、MemorySegment.WRITE
、MemorySegment.CLOSE
、MemorySegment.ACQUIRE
およびMemorySegment.HANDOFF
です。 一般に、より厳密なアクセス・モードのセグメントからより厳密でないアクセス・モードのセグメントに移動することはできません。 たとえば、読取り専用セグメントにMemorySegment.WRITE
アクセス・モードを追加しようとすると、例外が発生します。- 定義:
- インタフェース
MemorySegment
内のwithAccessModes
- パラメータ:
accessModes
- ゼロ個以上のアクセス・モードのORedマスク。- 戻り値:
- 特定のアクセス・モードを持つセグメント・ビュー。
-
asSlice
MappedMemorySegment asSlice(long offset, long newSize)インタフェースからコピーされた説明:MemorySegment
ベース・アドレスがこのセグメントのベース・アドレスと指定されたオフセットに加えて、指定の引数で新しいサイズが指定されている、新しいメモリー・セグメントのビューを取得します。- 定義:
- インタフェース
MemorySegment
内のasSlice
- パラメータ:
offset
- 新しいセグメント・ベース・オフセット(現在のセグメント・ベース・アドレスとの相対)(バイト単位)です。newSize
- 新しいセグメント・サイズ(バイト単位で指定)。- 戻り値:
- ベース/制限アドレスが更新された新しいメモリー・セグメント・ビュー。
-
force
void force()このセグメント・コンテンツに加えられた変更を、マップされたファイルを含むストレージ・デバイスに強制的に書き込みます。このセグメントにマップされたファイルがローカル・ストレージ・デバイスに存在する場合、このメソッドから返されると、セグメントが作成されてから、またはこのメソッドが最後に呼び出されてから行われたすべての変更がそのデバイスに書き込まれていることが保証されます。
一方、ファイルがローカルの記憶装置上にない場合、書込みは行われません。
このセグメントが読取り/書込みモードの(
FileChannel.MapMode.READ_WRITE
)でマップされていない場合、このメソッドを呼び出しても効果がない可能性があります。 特に、このメソッドは、読取り専用またはプライベート・マッピング・モードでマップされたセグメントには影響しません。 このメソッドは、実装固有のマッピング・モードに有効である場合も、そうでない場合もあります。 -
load
void load()このセグメント・コンテンツを物理メモリーにロードします。このメソッドは、戻ったときにこのセグメントの内容が物理メモリーに常駐することを保証するためにベスト・エフォートを行います。 このメソッドを呼び出すと、ページ違反や入出力操作が発生する可能性があります。
-
unload
void unload()このセグメント・コンテンツを物理メモリーからアンロードします。このメソッドでは、このセグメントの内容が物理メモリーに存在しないようにするためのベスト・エフォートが行われます。 このメソッドを呼び出した後にこのセグメントの内容にアクセスすると、いくつかのページ・フォルトおよびI/O操作が(このセグメント・コンテンツはページ・インする必要がある可能性があるため)に発生する可能性があります。
-
isLoaded
boolean isLoaded()このセグメント・コンテンツが物理メモリーに存在するかどうかを判断します。true
の戻り値は、このセグメントのすべてのデータが物理メモリーに常駐している可能性が高いため、仮想メモリーのページ・フォルトやI/O操作を発生させずにアクセスできることを意味します。false
の戻り値は、必ずしもセグメント・コンテンツが物理メモリーに存在しないことを意味するわけではありません。戻り値は保証ではなくヒントです。これは、基礎となるオペレーティング・システムが、このメソッドの呼出しが戻るまでにセグメント・データの一部をページ・アウトしている可能性があるためです。
- 戻り値:
- このセグメント・コンテンツが物理メモリーに常駐している可能性が高い場合は、
true
-