如何引用抛出异常的方法?

时间:2017-07-28 04:42:05

标签: jmh

如何使用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接受抛出的异常吗?

1 个答案:

答案 0 :(得分:2)

总结我从Kiril S.Oleg Estekhin收到的答案:

如果基准测试方法抛出异常,JMH将始终失败。要纠正这个问题,基准方法必须捕获异常。然后,它可以使用Blackhole对象消耗异常,或者从基准方法返回它。这将阻止编译器优化掉throw语句。