force(MemorySegment)
やload(MemorySegment)
などのマップされたメモリー・セグメントを操作する機能を提供します。 これらのクラスのメソッドは、MappedByteBuffer
クラスの一部の機能に適しています。 セグメントをバイト・バッファ(MemorySegment.asByteBuffer()
を参照してください)にマップし、その方法でMappedByteBuffer.force()
などをコールすることは可能ですが、これを実行できるのは、ByteBuffer APIに固有のサイズ制限のためにソース・セグメントが十分に小さい場合のみです。
マップされたメモリー・セグメントを高度に低レベルで制御する必要があるクライアントでは、カスタム・マップされたメモリー・セグメント・ファクトリの記述を検討する必要があります。JNIを使用すると、Linuxなどで、必要なパラメータを指定してmmap
を呼び出すことができます。返されるアドレスは、MemoryAddress.ofLong(long)
およびMemoryAddress.asSegmentRestricted(long, Runnable, Object)
を使用してメモリー・セグメントに簡単にラップできます。
特に指定がないかぎり、null
引数、またはこのクラスのメソッドに1つ以上のnull
要素を含む配列引数を渡すと、NullPointerException
がスローされます。
- 実装上のノート:
- このクラス(
load(MemorySegment)
、unload(MemorySegment)
およびisLoaded(MemorySegment)
を参照してください。)の一部のメソッドの動作は、プラットフォームに大きく依存します。そのため、これらのメソッドの呼出しは、特定のプラットフォームでは操作なしになる可能性があります。
-
メソッドのサマリー
修飾子と型メソッド説明static void
force(MemorySegment segment)
指定されたセグメントの内容に対する変更を、マップされたセグメント・ファイル記述子によって記述されたストレージ・デバイスに強制的に書き込みます。static boolean
isLoaded(MemorySegment segment)
指定されたセグメントの内容が物理メモリー内に存在するかどうかを判断します。static void
load(MemorySegment segment)
特定のセグメントの内容を物理メモリーにロードします。static void
unload(MemorySegment segment)
指定されたセグメントの内容を物理メモリーからアンロードします。
-
メソッドの詳細
-
isLoaded
public static boolean isLoaded(MemorySegment segment)指定されたセグメントの内容が物理メモリー内に存在するかどうかを判断します。true
の戻り値は、特定のセグメント内のすべてのデータが物理メモリーに存在する可能性が高いため、仮想メモリーのページ・フォルトやI/O演算を発生させずにアクセスできることを意味します。false
の戻り値は、必ずしもセグメント・コンテンツが物理メモリーに存在しないことを意味するわけではありません。戻り値は保証ではなくヒントです。これは、基礎となるオペレーティング・システムが、このメソッドの呼出しが戻るまでにセグメント・データの一部をページ・アウトしている可能性があるためです。
- パラメータ:
segment
- 内容をテストするセグメント。- 戻り値:
- 指定されたセグメントのコンテンツが物理メモリーに存在する可能性が高い場合は
true
- 例外:
IllegalStateException
- 指定されたセグメントが生存していない場合、または指定されたセグメントが制限され、このメソッドがセグメント所有者スレッド以外のスレッドから呼び出された場合。UnsupportedOperationException
- 指定されたセグメントがマップされたメモリー・セグメントでない場合(segment.isMapped() == false
の場合など)。
-
load
public static void load(MemorySegment segment)特定のセグメントの内容を物理メモリーにロードします。このメソッドは、返されたときに、指定されたセグメントのこの内容が物理メモリー内に存在することを確認するためのベスト・エフォートを行います。 このメソッドを呼び出すと、ページ違反や入出力操作が発生する可能性があります。
- パラメータ:
segment
- コンテンツがロードされるセグメント。- 例外:
IllegalStateException
- 指定されたセグメントが生存していない場合、または指定されたセグメントが制限され、このメソッドがセグメント所有者スレッド以外のスレッドから呼び出された場合。UnsupportedOperationException
- 指定されたセグメントがマップされたメモリー・セグメントでない場合(segment.isMapped() == false
の場合など)。
-
unload
public static void unload(MemorySegment segment)指定されたセグメントの内容を物理メモリーからアンロードします。このメソッドは、指定されたセグメントの内容が物理メモリー内に存在しないようにするためのベスト・エフォートを行います。 このメソッドを呼び出した後にこのセグメントの内容にアクセスすると、いくつかのページ・フォルトおよびI/O操作が(このセグメント・コンテンツはページ・インする必要がある可能性があるため)に発生する可能性があります。
- パラメータ:
segment
- コンテンツがアンロードされるセグメント。- 例外:
IllegalStateException
- 指定されたセグメントが生存していない場合、または指定されたセグメントが制限され、このメソッドがセグメント所有者スレッド以外のスレッドから呼び出された場合。UnsupportedOperationException
- 指定されたセグメントがマップされたメモリー・セグメントでない場合(segment.isMapped() == false
の場合など)。
-
force
public static void force(MemorySegment segment)指定されたセグメントの内容に対する変更を、マップされたセグメント・ファイル記述子によって記述されたストレージ・デバイスに強制的に書き込みます。このマッピング・ファイル記述子がローカル記憶域デバイスに存在する場合、このメソッドが返されたときに、セグメントが作成された後、またはこのメソッドが最後に呼び出された後に行われたすべての変更が、そのデバイスに書き込まれたことが保証されます。
このマッピング・ファイル記述子がローカル・デバイスに存在しない場合、そのような保証は行われません。
指定されたセグメントが読取り/書込みモードの(
FileChannel.MapMode.READ_WRITE
)でマップされていない場合、このメソッドを呼び出しても効果がない可能性があります。 特に、このメソッドは、読取り専用またはプライベート・マッピング・モードでマップされたセグメントには影響しません。 このメソッドは、実装固有のマッピング・モードに有効である場合も、そうでない場合もあります。- パラメータ:
segment
- セグメント・ファイル記述子で記述されたストレージ・デバイスに内容が書き込まれるセグメント。- 例外:
IllegalStateException
- 指定されたセグメントが生存していない場合、または指定されたセグメントが制限され、このメソッドがセグメント所有者スレッド以外のスレッドから呼び出された場合。UnsupportedOperationException
- 指定されたセグメントがマップされたメモリー・セグメントでない場合(segment.isMapped() == false
の場合など)。
-