Влияет ли эффект JMH Blackhole # receive () в зависимости от типа передаваемого объекта? - PullRequest
0 голосов
/ 02 февраля 2019

На основании документации я понимаю, что Blackhole#consume(Object obj) используется для предотвращения устранения мертвого кода при тестировании Java с использованием JMH.Есть ли разница в поведении между вызовом consume объекта ArrayList и итерацией по списку и вызовом 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);
      }
  }

Является ли один более точным (или менее переменным), чем другой?

...