java io读取性能对比
背景
从最早bio的只支持阻塞的bio(同步阻塞)
到默认阻塞支持非阻塞nio(同步非阻塞+同步阻塞)(此时加入mmap类)
再到aio(异步非阻塞)
虽然这些api改变了调用模式,但真正执行效率上是否也会有所不同,对此进行了此次java io的性能测试
首先从github上找到了2个项目,然后自己也实现了一个性能对比的实现,以便熟悉各种api
项目1:
https://github.com/stateIs0/io.benchmark
https://www.jianshu.com/u/434239413000
其中filechannel生成文件的代码就是错误的,其实文件中并没有内容

左边没有填入内容,右边是正确的
项目2:
https://github.com/romromov/java-io-benchmark
比较了不同物理硬件上,不同的api的性能差异
可以指定fileSize bufferSize 以及重复的次数 ,并且可以输出平均数和标准差
项目3:
https://github.com/victorsheng/benchmark-anything/tree/master/io-bencmmark
自己的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
其中,第一列实现,第二列文件大小,第三列时间差
java io读取性能对比的更多相关文章
- lua、groovy嵌入到java中的性能对比(转)
lua和groovy都是可以嵌入到java中的脚本语言.lua以高性能著称,与C/C++在游戏开放中有较多使用,groovy是一个基于Java虚拟机(JVM)的敏捷动态语言,在jvm下有着不错的性能. ...
- 2017年的golang、python、php、c++、c、java、Nodejs性能对比(golang python php c++ java Nodejs Performance)
2017年的golang.python.php.c++.c.java.Nodejs性能对比 本人在PHP/C++/Go/Py时,突发奇想,想把最近主流的编程语言性能作个简单的比较, 至于怎么比,还是不 ...
- 2017年的golang、python、php、c++、c、java、Nodejs性能对比[续]
2017年的golang.python.php.c++.c.java.Nodejs性能对比[续] 最近忙,这个话题放了几天,今天来个续集. 上篇传送门: 2017年的golang.python.p ...
- java数据库连接池性能对比
这个测试的目的是验证当前常用数据库连接池的性能. testcase Connection conn = dataSource.getConnection(); PreparedStatement st ...
- [java]序列化框架性能对比(kryo、hessian、java、protostuff)
序列化框架性能对比(kryo.hessian.java.protostuff) 简介: 优点 缺点 Kryo 速度快,序列化后体积小 跨语言支持较复杂 Hessian 默认支持跨语言 较慢 Pro ...
- java io 读取写文件
java 读取txt文件,汉字乱码,原因是因为文件的编码格式和程序编码采用了不同的编码格式.通常,假如自己不修改的话,windows自身采用的编码格式是gbk(而gbk和gb2312基本上是一样的编码 ...
- java -io 读取文件操作
主要分为字节读取和字符读取,字节读取可以一个一个读取和字节数组读取,字符读取同样之,字符读取适合文本读取,字节读取皆可以 这里直接上代码,读取文件的9个小demo package com.io; im ...
- Java IO读取文件之二
package com.lf.iopreoject; import java.io.BufferedReader; import java.io.File; import java.io.FileIn ...
- Java模板引擎性能对比
模板引擎性能对比 从Github上翻到对JSP.Thymeleaf 3.Velocity 1.7.Freemarker 2.3.23几款主流模板的性能对比,总体上看,Freemarker.Veloci ...
随机推荐
- 【朝花夕拾】Android自定义View篇之(十一)View的滑动,弹性滑动与自定义PagerView
前言 由于手机屏幕尺寸有限,但是又经常需要在屏幕中显示大量的内容,这就使得必须有部分内容显示,部分内容隐藏.这就需要用一个Android中很重要的概念——滑动.滑动,顾名思义就是view从一个地方移动 ...
- 【带着canvas去流浪(12)】用Three.js制作简易的MARVEL片头动画(上)
目录 一. 大作业说明 二.基本思路 三.视频纹理表面修复--UV映射 3.1 问题描述 3.2 纹理贴图的基本原理-UV映射 3.3 关键示例代码 四.小结 示例代码托管在:http://www.g ...
- 2019.6.16完成classstack任务
最终信息 4 ShineEternal 任务完成,账号已注销 120 149 80.537%
- 总结暨JAVAWEB学习开篇(一)
匆匆,距上一篇博客已经过去7月有余,遂作文一篇总结暨JAVAWEB学习开篇. 1. 啃英文新概念.在多方讨教英语大佬后改变学习方式,通过背诵英文书籍以及多听英文录音来学习,效果还不错(等真正有成效了跟 ...
- 机器学习-EM算法
最大期望算法 EM算法的正式提出来自美国数学家Arthur Dempster.Nan Laird和Donald Rubin,其在1977年发表的研究对先前出现的作为特例的EM算法进行了总结并给出了标准 ...
- spark 源码分析之十八 -- Spark存储体系剖析
本篇文章主要剖析BlockManager相关的类以及总结Spark底层存储体系. 总述 先看 BlockManager相关类之间的关系如下: 我们从NettyRpcEnv 开始,做一下简单说明. Ne ...
- c++ 动态规划(数塔)
c++ 动态规划(dp) 题目描述 观察下面的数塔.写一个程序查找从最高点到底部任意位置结束的路径,使路径经过数字的和最大. 每一步可以从当前点走到左下角的点,也可以到达右下角的点. 输入 5 13 ...
- Visual Studio 调试系列2 基本调试方法
系列目录 [已更新最新开发文章,点击查看详细] 在 Visual Studio 上下文中,当调试应用时,这通常意味着你在附加了调试器的情况下(即在调试器模式下)运行应用程序. 执行此操作时,调 ...
- IT技术人员的自我修养
1. 前言 在IT领域摸爬滚打多年,从一个普通程序员到技术主管,到技术经理,再到技术总监,踩过不少坑.加过不少班,也背过不少锅,在提升自身技术能力与管理能力的同时,也一直在思考,作为IT ...
- SQLyog连接数据库报错plugin caching_sha2_password could not be loaded
摘录自: https://blog.csdn.net/lihua5419/article/details/80394716