与dd相比,SSD上的java BufferedOutputStream写入速度较慢

与dd相比,SSD上的java BufferedOutputStream写入速度较慢,java,io,solid-state-drive,Java,Io,Solid State Drive,测试环境: macbook pro,2015年初 dd结果: 大约是757Mb/s java代码: 这明显比dd慢,我想知道BufferedOutputStream为什么这么慢,我如何提高java写性能?您是否尝试过一次编写一个完整的字节数组而不是一个字节?您似乎在这个操作上浪费了很多CPU。@real怀疑您是对的,我曾经尝试过写入一个字节[8*1024],吞吐量增加到大约900Mb/s,但我的实际输入很长,也许我应该自己构建缓冲区,而不是使用BufferedOutputStream也许您应该查

测试环境:

macbook pro,2015年初

dd结果:

大约是757Mb/s

java代码:


这明显比dd慢,我想知道BufferedOutputStream为什么这么慢,我如何提高java写性能?

您是否尝试过一次编写一个完整的字节数组而不是一个字节?您似乎在这个操作上浪费了很多CPU。@real怀疑您是对的,我曾经尝试过写入一个字节[8*1024],吞吐量增加到大约900Mb/s,但我的实际输入很长,也许我应该自己构建缓冲区,而不是使用BufferedOutputStream也许您应该查看通道和ByteBuffers(可轻松用作长缓冲区)。
sudo time dd if=/dev/zero of=~/test bs=8k count=500000
500000+0 records in
500000+0 records out
4096000000 bytes transferred in 5.409609 secs (757171197 bytes/sec)
    5.42 real         0.13 user         4.33 sys
try {
    BufferedOutputStream bos = new BufferedOutputStream(
        new FileOutputStream("temp_9999"), 8 * 1024);
    for (int i = 0; i < 1000000000; ++i) {
        bos.write(0);
    }

    bos.close();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
      disk0           disk2       cpu     load average
  KB/t tps  MB/s     KB/t tps  MB/s  us sy id   1m   5m   15m
  350.48  95 32.45     0.00   0  0.00  39 12 49  2.34 2.59 2.68
  281.13 123 33.88     0.00   0  0.00  42 13 45  2.34 2.59 2.68
  882.42  38 32.63     0.00   0  0.00  36  9 55  2.39 2.59 2.68
  493.16  69 33.21     0.00   0  0.00  36  9 55  2.39 2.59 2.68