随着JVM预热,所需的时间会有所不同。第二次运行将始终比第一次运行快。(第一次必须加载类并调用静态块)运行该方法10,000次后,它将再次更快(将代码编译为本机机器代码的默认阈值)
为了获得可重复使用的微基准测试的平均时间,我建议您忽略前10,000次迭代,并在其后运行2-10秒。
例如
long start = 0;int runs = 10000; // enough to run for 2-10 seconds.for(int i=-10000;i<runs;i++) { if(i == 0) start = System.nanoTime(); // do test}long time = System.nanoTime() - start;System.out.printf("Each XXXXX took an average of %,d ns%n", time/runs);非常重要:每种方法只能执行以下循环之一。这是因为它根据使用方式优化了整个方法。如果您有一个像这样的繁忙循环,则后面的循环将显得较慢,因为它们尚未运行并且优化效果不佳。



