JMH Blackhole#consume()的效果是否随传入对象的类型而变化?

时间:2019-02-01 22:57:34

标签: java jvm microbenchmark jmh

根据文档上,据我所知,Blackhole#consume(Object obj)是用来防止死代码消除使用JMH基准爪哇时。在ArrayList对象上调用consume与遍历列表并在每个元素上调用consume之间在行为上有区别吗?

例如,以下两个代码示例之间的行为是否会有所不同:

  @Benchmark
  @BenchmarkMode(Mode.AverageTime)
  @OutputTimeUnit(TimeUnit.MICROSECONDS)
  public void someBenchmarkMethod(Blackhole blackhole) {
      List<Integer> ret = //some method that we're benchmarking that returns a list
      blackhole.consume(ret);
  }

  @Benchmark
  @BenchmarkMode(Mode.AverageTime)
  @OutputTimeUnit(TimeUnit.MICROSECONDS)
  public void someBenchmarkMethod(Blackhole blackhole) {
      List<Integer> ret = //some method that we're benchmarking that returns a list
      for (Integer i : ret) {
          blackhole.consume(i);
      }
  }

一个比另一个更准确(或变量更少)吗?

0 个答案:

没有答案