java io 性能_java io读取性能对比

背景

从最早bio的只支持阻塞的bio(同步阻塞)

到默认阻塞支持非阻塞nio(同步非阻塞+同步阻塞)(此时加入mmap类)

再到aio(异步非阻塞)

虽然这些api改变了调用模式,但真正执行效率上是否也会有所不同,对此进行了此次java io的性能测试

首先从github上找到了2个项目,然后自己也实现了一个性能对比的实现,以便熟悉各种api

项目1:

其中filechannel生成文件的代码就是错误的,其实文件中并没有内容

e836f85d66959272124a1430d179ca3a.png

左边没有填入内容,右边是正确的

项目2:

比较了不同物理硬件上,不同的api的性能差异

可以指定fileSize bufferSize 以及重复的次数 ,并且可以输出平均数和标准差

项目3:

自己的io测试项目

发现mmap必须一次性读取,整个文件才能发挥应有的效果

但是同时整个buffer必须小于Integer.MAX_VALUE 因此,只能适用2G以下的文件,在多次申请小buffer的mmap情况下,性能非常差

硬件

mac系统 ssd硬盘

测试结果

读取:

file size:1024MB buffer size:1024B

InputStreamFileReader,1908

BufferedInputStreamFileReader,2013

InDirectBufferFileChannelReader,1935

DirectBufferFileChannelReader,1722

MultiMmapFileReader,13108

OneMmapFileReader,1231

RandomAccessFileReader,1941

file size:1024MB buffer size:4096B

InputStreamFileReader,606

BufferedInputStreamFileReader,614

InDirectBufferFileChannelReader,639

DirectBufferFileChannelReader,616

MultiMmapFileReader,5341

OneMmapFileReader,1287

RandomAccessFileReader,707

file size:1024MB buffer size:16384B

InputStreamFileReader,360

BufferedInputStreamFileReader,357

InDirectBufferFileChannelReader,371

DirectBufferFileChannelReader,368

MultiMmapFileReader,1905

OneMmapFileReader,1552

RandomAccessFileReader,405

写:

file size:1GB,buffer size:1KB

OutPutFileWriter,5972

BufferedOutPutFileWriter,1631

InDirectBufferFileChannelFileWriter,7021

DirectBufferFileChannelFileWriter,6781

OneMmapFileWriter,1373

MultiMmapFileWriter,26122

RandomAccessFileWriter,6118

file size:1GB,buffer size:4KB

OutPutFileWriter,2438

BufferedOutPutFileWriter,1454

InDirectBufferFileChannelFileWriter,2449

DirectBufferFileChannelFileWriter,3177

OneMmapFileWriter,1365

MultiMmapFileWriter,9124

RandomAccessFileWriter,2331

file size:1GB,buffer size:16KB

OutPutFileWriter,1131

BufferedOutPutFileWriter,1048

InDirectBufferFileChannelFileWriter,1479

DirectBufferFileChannelFileWriter,1606

OneMmapFileWriter,1338

MultiMmapFileWriter,3652

RandomAccessFileWriter,1093

其中,第一列实现,第二列文件大小,第三列时间差

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值