繁体   English   中英

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

[英]Why people say mmap by MappedByteBuffer is faster?

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

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

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

MappedByteBuffer适合于读取未顺序读取的二进制文件。

一个示例是读取包含树数据结构的数据库索引文件,该树数据结构的文件偏移量与文件的其他部分相同。 在这种情况下,您将不断在文件中前后搜索并读取数据,而我的测试表明,使用MappedByteBuffer比使用RandomAccessFile快得多。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM