为什么在循环中进行计算会减慢将打印写入控制台而不写入文件?

时间:2016-04-10 04:31:32

标签: java performance file console

我开始只是运行一些测试来查看写入文件和打印到控制台之间的速度差异,以及SSD和HDD之间存在多大差异。我的程序只打印数字0-10,000,000

Console: 6.089 file: 4.269

我也经历了这个测试达到一亿,并且始终看到相同的时间比例。我还检查了改变测试的顺序,并没有看到速度的变化。

在这里,它变得奇怪。我将两个printlns都更改为.println(i*i+42/7*9-89*2%400/2);

这样做之后我得到了

Console: 8.586
file: 4.475

控制台时间显着增加,但文件时间没有增加。作为最后的奇怪,我将其更改为.println( ( i*i+42/7*9-89*2 ) %400/2),在这种情况下,我实际上在控制台输出中看到加速

Console: 4.352
file: 4.66

任何人都可以解释这些奇怪的事吗?我似乎无法找到急剧变化的任何理由。我想也许它只是改变了必须写入的位数,但我无法解释为什么它只会影响控制台的速度。

非常感谢任何帮助或答案!这个问题困扰了我一段时间,所以我想我会问专家!

1 个答案:

答案 0 :(得分:1)

在此解释为什么打印到控制台的速度比文件慢(取自why is system out println so slow)。

println并不慢,它是与控制台连接的基础PrintStream,由托管操作系统提供的速度很慢,因为:

  1. 必须将字节发送到控制台应用程序(应该非常快)
  2. 每个字符必须使用(通常)真正的字体呈现(这很慢,关闭抗锯齿可以提高性能,顺便说一句)
  3. 可能需要滚动显示的区域,以便在可见区域附加一个新行(最好的情况:位块传输操作,最坏的情况:重新渲染整个文本区域)
  4. 由于不同的计算而导致的速度突然增加我无法给出解释。我最初想的是从int转换为double等,但这应该同时适用于println。

    打印的结果是否长于控制台的宽度?