使用StandardOpenOption.SYNC打开基础通道时,是否必须刷新MappedByteBuffer

时间:2017-12-30 22:55:04

标签: java c linux mmap memory-mapped-files

StandardOpenOption.SYNC是否与MappedByteBuffers配合使用并保存我们调用MappedByteBuffer.force()?

Set<OpenOption> options = new HashSet<>();
options.add(StandardOpenOption.READ);
options.add(StandardOpenOption.WRITE);
options.add(StandardOpenOption.CREATE);
options.add(StandardOpenOption.SYNC);

FileChannel channel = FileChannel.open("file.tmp", options);
MappedByteBuffer buf = channel.map(FileChannel.MapMode.READ_WRITE, 0,  channel.size());

buf.putInt(500);
buf.force(); // Needed or not?

编辑:

我假设jdk使用O_SYNC标志和mmap()调用,所以将这个问题扩展到linux世界:当使用O_SYNC标志打开底层fd时,我们是否必须调用msync()?

1 个答案:

答案 0 :(得分:0)

我找不到要验证的文档。

使用和不使用SYNC选项在linux / windows上测试,性能类似,因此我假设文件选项SYNC / O_SYNC不适用于mmap / MappedByteBuffer操作。