На основании документации я понимаю, что 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);
}
}
Является ли один более точным (или менее переменным), чем другой?