MappedByteBuffer は java.nio でメモリマップドI/Oを行うときに使う ByteBuffer です。その MappedByteBuffer が不揮発メモリ (Non-Volatile Memory/NVM) 向けに改良されました。
おそらく、Filesystem DAX を使って mmap で NVDIMM に直接アクセスするシチュエーションを考慮したものだと思います。
狙いは何か?
Filesystem DAX で NVDIMM に mmap アクセスする場合、メタデータ更新のタイミングが無いという問題がありました。そのため mmap に MAP_SYNC という新しいフラグが追加されており、これを使ってあげる必要があります。
この MAP_SYNC を FileChannel::map でも指定できるようにしてあげないといけないというのが、この JEP の狙いです。
MAP_SYNC が使えなくても、MappedByteBuffer::force を使えば安全性は確保できますが、効率が悪いので、MAP_SYNC 対応が必要とされています。
使い方
Filesystem DAX で NVDIMM を使用する場合、MapMode を従来のものの代わりに次のように指定します。- READ_ONLY の代わりに……
- jdk.nio.mapmode.ExtendedMapMode.READ_ONLY_SYNC を指定
- READ_WRITE の代わりに……
- jdk.nio.mapmode.ExtendedMapMode.READ_WRITE_SYNC を指定
これらを指定すると、内部的に mmap する際に MAP_SYNC フラグが設定されます。