如果我关闭使用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/