【发布时间】:2013-01-31 20:46:26
【问题描述】:
我有像
这样的数组byte[] b = new byte[10];
byte[] b1 = new byte[1024*1024];
我用一些值填充它们。说吧,
for(i=0;i<10;i++){
b[i]=1;
}
for(i=0;i<1024*1024;i++){
b1[i]=1;
}
然后我将它写入一个 RandomAccessFile 并再次从该文件读取到同一个数组中,
randomAccessFile.write(arrayName);
and
randomAccessFile.read(arrayName);
当我尝试计算这两个不同大小(10 字节和 1Mb)数组的吞吐量(使用为文件读取和写入计算的时间)时,1MB 数组的吞吐量似乎更高。
Sample Output:
Throughput of 10kb array: 0.1 Mb/sec.
Throughput of 1Mb array: 1000.0 Mb/sec.
为什么会这样?我有四核处理器的 Intel i7。我的硬件配置会对此负责吗?如果不是,可能的原因是什么?
【问题讨论】:
-
我在等待真正的专家来回答这个问题,但原因是 I/O 通常是分块执行的。例如,您的 10kb 数组适合一个 512kb 块,这意味着写入 512kb 数组所需的时间一样多,这意味着每单位存储的速度较低。
-
你是如何计算吞吐量的?
-
我将吞吐量计算为块/时间;其中块=(1 * 10)/ 1024; 10 KB。对于 1 MB,块 = 1;
标签: java arrays performance file-io throughput