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

时间:2011-08-26 06:15:28

标签: java mmap

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

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

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

2 个答案:

答案 0 :(得分:8)

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

一个例子是读取包含的数据库索引文件 树数据结构,文件偏移到文件的其他部分。在这 在这种情况下,你不断在文件中寻找前进和后退 阅读数据和 我的测试显示使用MappedByteBuffer比使用a {更快} RandomAccessFile

使用BufferedReader顺序读取文本文件或二进制文件 或BufferedInputStream是有效的。使用通常没有优势 用于此的内存映射文件以及管理内存映射的开销 可能会比MappedByteBufferBufferedReader慢一些BufferedInputStream

答案 1 :(得分:1)

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

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

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