如果我关闭使用swapoff -a的交换并使用RandomAccessFile写入一些数据,它将每次刷新到磁盘吗?假设我没有打电话给RandomAccessFile.getFD().sync()

最佳答案

就其本身而言,RandomAccessFile不执行任何缓冲,因此对RandomAccessFile的调用直接进入OS write调用。

如果先调用getChannel然后再调用FileChannel.map,则大概运行时将使用mmap映射文件。在这种情况下,问题就变成了,何时写入mmap缓冲区的内容何时刷新到磁盘?显然,操作系统刷新写入缓冲区的每个单个字节都是疯狂的。答案是操作系统将定期将更改刷新到磁盘,或者您可以调用msync或(从Java)调用MappedByteBuffer.force

swapoff -a不会影响任何这种行为。对于RandomAccessFile,运行时将调用write,这与内存或交换空间无关。在mmap的情况下,程序可见的缓冲区不是由交换空间而是由文件支持的。

关于java - 如果我使用swapoff -a关闭交换并使用RandomAccessFile写入一些数据,是否每次刷新都会将其写入磁盘?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59168124/

10-11 17:24