有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java根据传入的对象类型,JMH Blackhole#consume()的效果会有所不同吗?

根据这些文档,我了解到Blackhole#consume(Object obj)用于在使用JMH对Java进行基准测试时防止死代码消除。在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) 个答案