java.io包中的缓冲如何优化性能

时间:2017-05-30 08:19:56

标签: java io jvm

java.io包中的缓冲如何优化性能。我已经阅读了java.io包中的主要类的源代码,我注意到我将流包装到缓冲流中 - 然后它最终会发生相同的工作,但不知何故,它会提高性能。我知道缓冲网络将使用缓存节省一些输出流量,但文件写入如何从缓存中受益。我假设答案是在Java之外的某个地方 - 就像在Jit编译器或底层操作系统中一样。

2 个答案:

答案 0 :(得分:2)

JNI电话和下面的系统调用并不便宜。因此,如果您一次读取或写入几个字节的内容,这可能会变得非常昂贵。相反,一次读取/写入大小为几千字节的缓冲区,然后只是在缓冲区上执行数组访问(通常编译为x86上的单个mov指令)可以便宜得多。

但是,在某些情况下,当您希望在直接字节缓冲区,文件或套接字之间传输大型数据块时,它们通常不会更快,scatter/gathertransfer方法或内存映射文件可以更高效,因为它们可以避免中间复制。

答案 1 :(得分:1)

主要是因为它大大节省了系统调用。它不是每个字节调用一次操作系统,而是每缓冲区(8k字节)或每flush()调用一次。