繁体   English   中英

java中经过的时间不一致

[英]inconsistent time elapsed in java

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

示例代码:

long startTime=System.nanoTime();
String.valueOf(number).length();
long endTime = System.nanoTime();
System.out.println(endTime-startTime);

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().

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

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

已失效的时间将根据JVM的执行方式而有所不同,并将处理时间分配给执行此代码的线程。 我尝试了多次运行,总是得到9000到11000纳秒范围内的结果。 这看起来相当一致。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM