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) 个答案