Java常用的几种IO性能对比
最近最常做的工作就是各种文件读写操作,所以来真实地看看各种 IO 方式之间的性能对比。
FileOutputStream与BufferedWriter
两种区别不大,且与使用NIO来写文件速度区别也不大
| |
ByteBuffer与直接内存
是否采用直接内存几乎没有区别
| |
FileChannel与文件空洞
NIO中,FileChannel可以决定文件写入的位置,通常用这样来产生文件空洞
MappedByteBuffer
使用直接内存映射,来提升IO性能
这里有一个重大bug,关闭FileChannel后,MappedByteBuffer不会释放所持有的文件。之后如果需要再对写入的文件进行操作时,会导致没有权限。MappedByteBuffer所持有的内存需要手动来释放。释放方式有几种:
- 直接调用System.gc();
- 利用反射来释放
| |
| |
2和3两种释放方式,可能会根据jdk的版本而有所不同。(实测1.8是无法通过反射释放内存的)
- 与传统Io的区别

内存文件映射的方式:

- 实例代码
| |
利用apache-common向tar中压缩文件
| |