java中经过的时间不一致

cod*_*r87 2 java int time

我正在尝试使用nanoTime计算java中的时间.但每次它给我不同的结果.为什么总是不一致?

示例代码:

long startTime=System.nanoTime();
String.valueOf(number).length();
long endTime = System.nanoTime();
System.out.println(endTime-startTime);
Run Code Online (Sandbox Code Playgroud)

Mar*_*ged 6

nanoTime()它的姐妹currentTimeMillis()并不精确,根据您运行代码的体系结构,它们会受到舍入的影响(有关详细信息,请参阅javadoc):

This method provides nanosecond precision, but not necessarily nanosecond resolution 
(that is, how frequently the value changes) -
no guarantees are made except that the resolution is at least as good
as that of currentTimeMillis().
Run Code Online (Sandbox Code Playgroud)

如果您测量时间以确定替代a或b是否更快,那么您基本上是在进行微观基准测试.有框架,你应该使用它们.可能最着名的Java是JMH.如果您需要对更大的代码部分执行相同操作,则可以考虑进行性能分析.

您可能想看看这个stackoverflow文章:如何在Java中编写正确的微基准测试?