【发布时间】:2016-01-04 04:32:41
【问题描述】:
我有一个应用程序,我在其中纯粹以 Java 顺序处理文件。文件打开,直接读取一次,然后关闭。
目前我只使用文件通道。有一个内存映射文件的选项。这样做有什么好处吗?
【问题讨论】:
-
可能没有。 MMapping 有助于随机访问。您是否尝试过并衡量了收益?
-
@zapl 我宁愿对这个特定问题有专家意见而不是经验测试,因为内存映射的操作系统交互很复杂,而且我不够专业,无法理解不同的后果。此外,不同的操作系统可能工作方式不同。基本上我希望有该领域的专家提供权威的答案。
-
stackoverflow.com/questions/45972/mmap-vs-reading-blocks 涵盖了一些更理论的方面。通道应该等于读取,因为您复制到用户空间。直接文件到文件复制可以利用 DMA 并避免使用空间
-
The javadoc 说:对于大多数操作系统来说,将文件映射到内存比通过通常的读写方法读取或写入几十千字节的数据更昂贵。从性能的角度来看,通常只值得将相对较大的文件映射到内存中。