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

问题描述 投票:0回答:1

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()?

java c linux mmap memory-mapped-files
1个回答
0
投票

我找不到要验证的文件。

在带有和不带SYNC选项的linux / windows上测试,性能类似,所以我假设文件选项SYNC / O_SYNC不适用于mmap / MappedByteBuffer操作。

© www.soinside.com 2019 - 2024. All rights reserved.