我认为 mmap 没有使用虚拟内存快,它仍然有硬盘 I/O。
但是网上很多人说它很快,但没有理由。
在我的测试中,我使用 BufferedReader 和 MappedByteBuffer 读取一个文件,第一个更快。
最佳答案
MappedByteBuffer
适用于读取非顺序读取的二进制文件。
一个例子是读取包含的数据库索引文件
具有文件偏移量的树数据结构到文件的其他部分。在这个
在这种情况下,您不断地在文件中向前和向后寻找并且
读取数据和
我的测试表明使用 MappedByteBuffer
比使用
RandomAccessFile
.
使用 BufferedReader
顺序读取文本文件或二进制文件
或 BufferedInputStream
是高效的。使用通常没有优势
为此的内存映射文件和管理内存映射的开销
可能会使 MappedByteBuffer
比 BufferedReader
或 BufferedInputStream
慢。
关于java - 为什么人们说 MappedByteBuffer 的 mmap 更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7200690/