与dd

时间:2017-04-11 13:55:22

标签: java io ssd

  

测试环境:

macbook pro,2015早期

  

dd结果:

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

约为757Mb / s

  

java代码:

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();
}
  

超出java代码执行期间的iostat结果:

      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

明显慢于dd,我想知道为什么BufferedOutputStream这么慢,我怎么能提高java写入性能呢?

0 个答案:

没有答案