为什么人们说MappedByteBuffer的mmap更快?

我认为mmap并不像使用虚拟内存那么快,它仍然具有硬盘I / O.

但互联网上的很多人都说它很快,但没有理由。

在我的测试中,我使用BufferedReader和MappedByteBuffer读取文件,第一个更快。

MappedByteBuffer适用于读取不按顺序读取的二进制文件。

一个示例是读取包含树数据结构的数据库索引文件,该文件具有文件偏移到文件的其他部分。 在这种情况下,您不断在文件中搜索前进和后退并读取数据,我的测试显示使用MappedByteBuffer比使用RandomAccessFile快得多。

使用BufferedReaderBufferedInputStream顺序读取文本文件或二进制文件是有效的。 使用内存映射文件通常没有优势,管理内存映射的开销可能会使MappedByteBufferBufferedReaderBufferedInputStream慢。

mmap更快的原因是文件不是一次全部读入内存。 该文件映射到内存中的地址,您可以以非顺序方式访问它,而无需加载您不需要处理的文件部分。

http://en.wikipedia.org/wiki/Mmap

这是一种特定于应用程序的,但它实际上适用于仅部分处理的大型文件和通常不适合内存的文件。 还有其他用例,例如共享内存和共享对象。 使用mmap加载动态链接库,这样就不需要为每个想要使用它们的进程从磁盘加载它们。 使用共享库的第二个过程实际上是在查看与第一个进程相同的物理内存。