【发布时间】:2016-04-25 14:18:39
【问题描述】:
我有一个从我的 Java 编程书中得到的简单程序,只是添加了一点。
package personal;
public class SpeedTest {
public static void main(String[] args) {
double DELAY = 5000;
long startTime = System.currentTimeMillis();
long endTime = (long)(startTime + DELAY);
long index = 0;
while (true) {
double x = Math.sqrt(index);
long now = System.currentTimeMillis();
if (now >= endTime) {
break;
}
index++;
}
System.out.println(index + " loops in " + (DELAY / 1000) + " seconds.");
}
}
这将返回128478180 loops in 5.0 seconds.
如果我在 if 语句之前添加 System.out.println(x);,那么我在 5 秒内的循环次数会下降到 400,000 次,这是因为 System.out.println() 的延迟吗?还是只是x在我没有打印出来的时候没有被计算出来?
【问题讨论】:
-
打印到控制台必须是您可以在性能方面做的最糟糕的事情。 IO 操作需要很多时间。
-
System.out.println 是一个 IO 操作,是的,它可以影响任何程序的性能
-
问得好问题,我不明白反对意见。仅仅因为它对你来说微不足道,并不意味着你应该投反对票。
-
为了比较,你可以在循环中使用
StringBuilder和append(x),然后打印出来......