Java System.nanoTime经过的平均时间越来越小

Thi*_*lan 0 java jit jvm-hotspot nanotime

这不是我第一次遇到编程语言中的时钟时间问题.基本上我通过在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());
}
Run Code Online (Sandbox Code Playgroud)

因此,经过大约1,000次运行后,经过的时间为750k至850k.但经过大约100,000次运行后,经过的时间降至580k至750k.通过观察平均值(stats.getMeans())可以最好地注意到持续减少,其中108k循环后平均值为〜632k,而3k循环平均值为~100万.切换到currentTimeMillis而不是nanoTime不会改变任何东西.

Jon*_*eet 7

问题是,由于某种原因,while循环运行的时间越长,经过的时间越来越短.谁能解释一下?

这是您的热点 - 您运行代码的次数越多,优化程度越高.最终它会尽其所能,你会看到结果的稳定.