相关疑难解决方法(0)

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

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

@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();
  }
}
Run Code Online (Sandbox Code Playgroud)

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

# Warmup Iteration   1: 171.596 us/op
# Warmup Iteration   2: 689.337 us/op
....
Iteration   1: 677.625 us/op
....
Run Code Online (Sandbox Code Playgroud)

命令行:

java -jar target/benchmarks.jar .*Test.* -wi 5 -w 1000ms -i 10 -r 1000ms -t 1 -f 5 -tu us
Run Code Online (Sandbox Code Playgroud)

玩叉子或线程的数量似乎没有什么区别.

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

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

注意:这是一个后续工作是否有任何优势在mapToInt之后调用map,哪里需要?

java performance microbenchmark jmh

6
推荐指数
0
解决办法
70
查看次数

标签 统计

java ×1

jmh ×1

microbenchmark ×1

performance ×1