为什么FileChannel的性能优于MemoryMappedBuffer?

时间:2016-11-09 15:37:53

标签: java nio memory-mapping

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

  • 使用FileChannel
  • 使用从FileChannel
  • 获取的MemoryMappedBuffer

我期待MemoryMappedBuffer的性能优于FileChannel,但FileChannel的性能始终高出约30%。

我正在寻找解释。 我一次以1 gb的速度进行内存映射,一旦用完,我就会映射另一个1 gb。

我的环境:Windows 7平台64位至强2.7 ghz 2处理器

1 个答案:

答案 0 :(得分:2)

两种变体都必须执行相同的磁盘I / O.两者都会将内存中的页面缓存为从磁盘读取。内存映射有一些页面错误开销。那么为什么假设有足够的物理内存来读取它会更快?