为什么从文件输入的速度越来越快?



我有10个文件,每个文件是500M。

我使用Long randomValue = Math.abs(random.nextLong());来生成这些文件。文件中的每一行都是一个随机值。一个文件大约有 26374000 行。

当我在另一个程序中一个接一个地读取这些文件并计算成本时间时,我发现输入变得更加快。为什么?

read 0 file 26373542 lines time : 27046ms
read 1 file 26373627 lines time : 24155ms
read 2 file 26373676 lines time : 19227ms
read 3 file 26373768 lines time : 22875ms
read 4 file 26373681 lines time : 20813ms
read 5 file 26373774 lines time : 18297ms
read 6 file 26373787 lines time : 10556ms
read 7 file 26373557 lines time : 11614ms
read 8 file 26373566 lines time : 9751ms
read 9 file 26373653 lines time : 13372ms

这是我的程序:

Long start = new Date().getTime();
FileReader fr = new FileReader(inFile);
BufferedReader br = new BufferedReader(fr);
String num;
while((num = br.readLine()) != null) {
sorted[j++] = Long.parseLong(num);
count++;
}
Long end = new Date().getTime();
System.out.println("read " + i + " file " + j + "lines time : " + (mid - start) + "ms");
br.close();
fr.close();

几件事:

  1. 正如评论中所指出的,JVM在预热后通常会提高性能 - 尽管从您的代码片段中不清楚您是否为每个文件启动了新的JVM。
  2. 您正在从磁盘读取文件。目前尚不清楚它是旋转磁盘还是SSD - 它们具有截然不同的性能特征。尽管如此,从磁盘读取数据时存在大量变量,这使得很难对正在测试的基础算法进行直接基准测试,除非您先将数据加载到内存中,然后在秒表上点击开始。
  3. 您的文件不相同(行数不同,内容可能不同等)
  4. 一旦你考虑了上述内容,你可能需要考虑你是否做了足够多的可重复测试,测试持续时间是否足够长,等等,然后再得出太多关于性能的具体结论。

最新更新