我正在使用多个线程读取50 GB的文件(只读),每个线程都从文件中读取一个连续的段。我尝试了两种方法


使用文件通道
使用从FileChannel获得的MemoryMappedBuffer


我期望MemoryMappedBuffer的性能优于FileChannel,但FileChannel的性能始终好于30%。

我正在寻找一个解释。
我一次将内存映射到1 GB,一旦用完,我将映射另外1 GB。

我的环境:Windows 7平台64位Xeon 2.7 GHz 2个处理器

最佳答案

两种变体都必须执行相同的磁盘I / O。两者都将从磁盘读取时将页面缓存在内存中。内存映射有一些页面错误开销。那么,如果要读取大量的物理内存,为什么还要期望它更快呢?

关于java - 为什么FileChannel的性能优于MemoryMappedBuffer?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40510713/

10-10 08:52