Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中经过的时间不一致_Java_Time_Int - Fatal编程技术网

java中经过的时间不一致

java中经过的时间不一致,java,time,int,Java,Time,Int,我正在尝试使用nanoTime计算java中的延时。但每次它都会给我不同的结果。为什么它不总是一致的 示例代码: long startTime=System.nanoTime(); String.valueOf(number).length(); long endTime = System.nanoTime(); System.out.println(endTime-startTime); 所经过的时间将根据JVM将如何执行以及将处理时间分配给执行此代码的线程而有所不同。 我尝试了多次运行,结

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

示例代码:

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

所经过的时间将根据JVM将如何执行以及将处理时间分配给执行此代码的线程而有所不同。 我尝试了多次运行,结果总是在9000到11000纳秒之间。这看起来相当一致。

nanoTime()
及其姐妹
currentTimeMillis()
不精确,并且取决于运行代码的体系结构,它们会受到舍入的影响(有关详细信息,请参阅):

如果您测量时间以决定备选方案a或b是否更快,那么您基本上是在进行微观基准测试。这里有一些框架,你应该使用它们。对于Java来说,最著名的可能是。如果需要对较大的代码部分执行同样的操作,则可以考虑剖析。


你可能想看看这个stackoverflow帖子:

强制评论;为什么需要保持一致?因为CPU负载和状态并不总是相同的(每次都不同)。正如@Gosu所建议的,这不是正确的微观基准测试方法,因为这样的代码永远不会给出一致的时间;正如@defectus所说,你必须问问自己,为什么你需要保持一致。这看起来像是一个XY问题,那么您想要实现什么呢?为了一致性,请使用毫秒而不是纳秒来计算经过的时间。
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().