gpt4 book ai didi

java - System.nanoTime 有什么问题?

转载 作者:行者123 更新时间:2023-11-29 03:52:14 26 4
gpt4 key购买 nike

我有一个很长的字符串,其模式为 </value>最后,我试图测试一些函数调用的性能,所以我进行了以下测试以试图找出答案......但我认为我可能错误地使用了 nanoTime?因为无论我如何交换顺序,结果都没有意义......

  long start, end;

start = System.nanoTime();
StringUtils.indexOf(s, "</value>");
end = System.nanoTime();
System.out.println(end - start);

start = System.nanoTime();
s.indexOf("</value>");
end = System.nanoTime();
System.out.println(end - start);

start = System.nanoTime();
sb.indexOf("</value>");
end = System.nanoTime();
System.out.println(end - start);

我得到以下信息:

163566    // StringUtils
395227 // String
30797 // StringBuilder

165619 // StringBuilder
359639 // String
32850 // StringUtils

无论我以何种顺序交换它们,数字总是会有些相同...这是怎么回事?

来自 java.sun.com 网站的常见问题解答:

Using System.nanoTime() between various points in the code to perform elapsed time measurements should always be accurate.

还有:

http://download.oracle.com/javase/1.5.0/docs/api/java/lang/System.html#nanoTime()

最佳答案

两次运行之间的差异在微秒的数量级,这是预期的。你的机器上发生了很多事情,这使得你的应用程序的两次运行之间的执行环境永远不会相同。这就是您获得这种差异的原因。

编辑:Java API 说:

This method provides nanosecond precision, but not necessarily nanosecond accuracy.

关于java - System.nanoTime 有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8229027/

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