gpt4 book ai didi

java - Java 中的计时方法会产生错误的值?

转载 作者:行者123 更新时间:2023-12-02 08:58:09 25 4
gpt4 key购买 nike

我尝试使用 System.currentTimeMillis() 输出运行特定方法所需的平均时间:

        for (int i = 1; i <= 18; i++) {
int n = (int) Math.pow(2, i);
double total_time = 0;
for (int j = 1; j <= 5; j++) {
long startTime = System.currentTimeMillis();
runMethod();
long endTime = System.currentTimeMillis();
double difference = (double) (endTime - startTime);
total_time += difference / 1000;

}
System.out.println("N = " + Integer.toString(n) +": " + Double.toString(total_time / 5) + " s");
}

但是,我尝试自己在标准输出中的报告时间之间计时,但似乎相差很远(对于一次迭代,我将其计时为 30 秒左右,但它报告了 8 秒)。这是使用错误的方法吗?或者我实现得不正确?

标准输出是否有可能被延迟,以至于直到方法完成后才报告实际时间,以便我自己根据输出中显示的内容计算更长的时间?

最佳答案

正如其他人所观察到的:
- 除非需要,否则不要转换为double
- 使用System.nanoTime()代替System.currentTimeMillis()

它可能是这样的:

for (int i = 1; i <= 18; i++) {

final int n = 1 << i; // = 2**i
/**/ long total_time = 0;

for (int j = 1; j <= 5; j++) {
final long t0 = System.nanoTime();
runMethod();
total_time += (System.nanoTime() - t0);
}
System.out.println("N = " + n + ": " + ((double)total_time / 1_000 / 1_000 / 1_000 / 5) + " s");
System.out.println("N = " + n + ": " + ((double)total_time / 1_000 / 1_000 / 5) + " ms");
System.out.println("N = " + n + ": " + ((double)total_time / 1_000 / 5) + " μs");
System.out.println("N = " + n + ": " + ((double)total_time / 5) + " ns");
}

关于java - Java 中的计时方法会产生错误的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60365561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com