如何使用jmh对使用jmh抛出异常的方法进行基准测试?
我在jmh 1.19下尝试了以下内容:
@Benchmark
public void throwException() throws IllegalArgumentException
{
throw new IllegalArgumentException("Hard-coded exception");
}
但得到了这个错误:
# Run progress: 0.00% complete, ETA 00:02:00
# Fork: 1 of 3
# Warmup Iteration 1: <failure>
java.lang.IllegalArgumentException: Hard-coded exception
[...]
我是否应该按照以下方式排除异常?
@Benchmark
public void throwException(Blackhole bh)
{
try
{
throw new IllegalArgumentException("Hard-coded exception");
}
catch (IllegalArgumentException e)
{
bh.consume(e);
}
}
还是有另一种方法告诉jmh
接受抛出的异常吗?
答案 0 :(得分:2)
总结我从Kiril S.和Oleg Estekhin收到的答案:
如果基准测试方法抛出异常,JMH将始终失败。要纠正这个问题,基准方法必须捕获异常。然后,它可以使用Blackhole
对象消耗异常,或者从基准方法返回它。这将阻止编译器优化掉throw
语句。