gpt4 book ai didi

java - 为什么 Java System.timeNano() 显示相同的时间?

转载 作者:行者123 更新时间:2023-11-30 06:14:15 26 4
gpt4 key购买 nike

我想用下面的代码测试一些排序算法的运行时间

int n = 2000;
for(int i=0; i<10; i++){
n *= 2;
init(array, n); // initializes array with n elements
long startTime = System.nanoTime();
sort(array;
long elapsedTime = System.nanoTime()-startTime;
System.out.println("Size: "+n+"\t\tTime: "+elapsedTime/1000000+"(ms)");
}

输出是

Size: 4000      Time: 0(ms)
Size: 8000 Time: 0(ms)
Size: 16000 Time: 0(ms)
Size: 32000 Time: 0(ms)
Size: 64000 Time: 0(ms)
Size: 128000 Time: 0(ms)
Size: 256000 Time: 0(ms)
Size: 512000 Time: 0(ms)
Size: 1024000 Time: 0(ms)
Size: 2048000 Time: 0(ms)

问题不在于算法,它正确地对数组进行了排序,并且它需要很长时间才能完成大型数组的工作。这个例子运行大约需要 10 秒。我想我按照 Java 文档中的描述使用了 nanoTime()。我搜索了这个问题的答案,似乎人们也遇到过类似的问题。例如,这里 Is there a stopwatch in Java? .但是,我找不到如何解决问题的答案。有人建议使用 apache 的 StopWatch,但据我了解,它使用对 nanoTime() 的类似调用。那么,如何解决这个问题呢?如果它有所作为,我将在 Windows 7 中使用 jre 1.8.0_31 运行代码。谢谢

最佳答案

您看到的都是相同的数字,因为您使用的是 integer division将纳秒转换为毫秒,其效果是除以它然后截断所有小数位。

尝试改变:

elapsedTime/1000000

到:

elapsedTime/1000000d

获取包含小数位的结果,这样您就可以获得小数毫秒。

您还可以通过将对排序的调用替换为 Thread.sleep(50); 来验证循环的计时 - 您应该会看到循环的每次迭代花费的时间略超过 50 毫秒。

关于java - 为什么 Java System.timeNano() 显示相同的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30587058/

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