JMH基准测试输出非数字平均值 是JMH Bug还是基准测试问题?

结论
这不是JMH的原生Bug,问题出在自行编写的基准测试代码上——出现非数值结果的核心原因是对应轮次的基准测试执行失败,没有产出有效统计数据。
具体逻辑
JMH只有在某一轮迭代完整执行完测试逻辑、没有中途中断的前提下,才会统计这一轮的耗时、吞吐量等性能指标。如果迭代运行过程中抛出未捕获异常、JVM异常退出、进程被外部信号打断,这一轮的统计数据就会缺失,最终结果汇总时对应位置就不会展示正常数值,通常会用<error>占位符填充,和截图里的表现完全匹配。
高频触发场景
- 测试逻辑本身存在缺陷,运行到特定分支时触发空指针、数组越界、断言失败等运行时异常,直接中断当前轮次执行
- JMH注解配置错误,比如
@Warmup预热轮次、@Measurement测量轮次设置不合理,部分轮次启动时测试依赖的资源还未初始化完成,调用直接报错 - 测试代码中混入了会终止JVM进程的逻辑,比如误调用
System.exit(),直接打断测试流程导致数据丢失
排查方法
直接往上翻JMH运行的控制台日志,就能找到失败轮次打印的完整异常栈,顺着栈信息修复代码问题后重跑基准测试,就能得到正常的数值结果。
内容的提问来源于stack exchange,提问作者coderodde
相关产品推荐
相关产品推荐

