Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不同大小的阵列的吞吐量不同_Java_Arrays_Performance_File Io_Throughput - Fatal编程技术网

Java 不同大小的阵列的吞吐量不同

Java 不同大小的阵列的吞吐量不同,java,arrays,performance,file-io,throughput,Java,Arrays,Performance,File Io,Throughput,我有这样的数组 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; } 当我尝试计算这两个不同大小(10字节和1Mb)的阵列的吞吐量(使用为文件读写计算的时间)时,1Mb阵列的吞吐量似乎更大 Sample Output: Throughput of

我有这样的数组

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;
}
当我尝试计算这两个不同大小(10字节和1Mb)的阵列的吞吐量(使用为文件读写计算的时间)时,1Mb阵列的吞吐量似乎更大

Sample Output:
Throughput of 10kb array: 0.1 Mb/sec.
Throughput of 1Mb array: 1000.0 Mb/sec.

为什么会发生这种情况?我有带四核处理器的英特尔i7。我的硬件配置会对此负责吗?如果不是,可能的原因是什么?

造成巨大差异的原因是,无论传输的数据大小如何,I/O中都会产生开销,这就像出租车的降旗一样。开销不限于java,包括许多O/S操作,包括:

  • 在磁盘上查找文件
  • 正在检查文件的O/S权限
  • 打开文件进行I/O
  • 关闭文件
  • 更新文件系统中的文件信息
  • 许多其他任务
此外,磁盘I/O是以页为单位执行的(大小取决于O/S,但通常为2K),因此1字节的I/O成本可能与2048字节的I/O成本相同:一个稍微公平的比较是2048字节数组和1Mb数组

如果您使用的是缓冲I/O,则可以进一步加快更大的I/O任务



最后,您报告的“10Kb”实际上只有10个字节,因此您的计算可能不正确。

我正在等待真正的专家回答这个问题,但原因是I/O通常是在块上执行的。例如,您的10kb阵列适合一个512 kb的数据块,这意味着写入所需的时间与512kb阵列所需的时间相同,这意味着每单位存储的速度较低。您如何计算吞吐量?我将吞吐量计算为数据块/所用时间;其中chunk=(1*10)/1024;10 KB。对于1MB,chunk=1;
Sample Output:
Throughput of 10kb array: 0.1 Mb/sec.
Throughput of 1Mb array: 1000.0 Mb/sec.