第一次热身比平均水平快得多

时间:2015-09-09 10:16:47

标签: java performance microbenchmark jmh

我有一个非常简单的微观基准

@State(Scope.Benchmark)
@BenchmarkMode(Mode.AverageTime)
public class Test {

  List<Integer> list =  new Random().ints(100_000).boxed().collect(toList());

  @Benchmark public int mapToInt() {
    return list.stream().mapToInt(x -> x * x).sum();
  }
}

当我运行它时,我总是得到一个结果,第一次预热运行比下一次运行快得多:

# Warmup Iteration   1: 171.596 us/op
# Warmup Iteration   2: 689.337 us/op
....
Iteration   1: 677.625 us/op
....

命令行:

java -jar target/benchmarks.jar .*Test.* -wi 5 -w 1000ms -i 10 -r 1000ms -t 1 -f 5 -tu us

使用分叉或线程的数量似乎没有什么区别。

所以看起来某些优化会被恢复,但我找不到它是什么。

由于我的基准测试问题导致性能下降,还是这种去优化代表了真实应用中会发生什么?

注意:这是Is there any advantage of calling map after mapToInt, where ever required?

的后续行动

0 个答案:

没有答案