这不是我第一次在编程语言中遇到时钟时间问题。基本上,我通过在 while 循环中调用一个函数来测量它的运行速度。问题是由于某种原因,while 循环运行的时间越长,经过的时间越短。谁能解释一下?代码如下。
DescriptiveStatistics stats = new DescriptiveStatistics();
while(true) {
long startTime = System.nanoTime();
executeSaxonXsltTransformation();
long stopTime = System.nanoTime();
long elapsedTime = stopTime-startTime;
stats.addValue((double)elapsedTime);
System.out.println(stats.getN()+" - "+elapsedTime+ " - "+stats.getMean());
}
所以在大约 1,000 次运行后,经过的时间是 750k 到 850k。但是在大约 100,000 次运行后,经过的时间下降到 580,000 到 750,000。通过观察平均值 (stats.getMeans()) 可以最好地注意到持续下降,在 108k 循环之后,平均值约为 632k,而 3k 循环后平均值约为 100 万。切换到 currentTimeMillis 而不是 nanoTime 不会改变任何东西。