【发布时间】:2012-10-11 12:59:39
【问题描述】:
有人对此进行了基准测试吗?我想尽可能快地写入磁盘,最大限度地减少写入调用的延迟。我想知道写入内存映射缓冲区(通过 buffer.put())是否比仅在 Java 端缓冲内容并在缓冲区已满后仅刷新到 fileChannel 更快。这样,一旦缓冲区已满,我将只进行系统调用(FileChannel.write)。我不确定当我将一些字节写入 MappedByteBuffer 时会发生什么,换句话说,是否完成了系统调用。
使用缓冲方法,我将能够以 16,32 或 64k 的块写入磁盘,我认为这是最佳的。缓冲的缺点是,如果应用程序崩溃,您必须有一个关闭挂钩来刷新内容。还有一层额外的复制到缓冲区,而不是直接写入文件通道。如果你拖尾文件,你可能看不到你想要的,因为内容被缓冲了。我也不知道如果尾随内存映射文件会发生什么。
有经验的人可以帮忙吗?
【问题讨论】:
-
我没有对此进行基准测试,所以这是一个评论,但从我读过的所有内容来看,内存映射 IO 应该要快得多。
标签: java file-io io real-time nio