首页 > 解决方案 > jmh 结果中的 cnt 列是什么?

问题描述

在我的 jmh 课程中,我正在使用

@BenchmarkMode(Mode.SampleTime)
@Measurement(iterations = 10)
@Threads(value = 10)

在班级层面。

在结果中,对于cnt列,我看到一种方法为 132,另一种方法为 155。我假设cnt可能意味着执行次数,但这些数字与我的预期不符。

执行次数不应该是 10(线程)* 10(迭代)= 100 吗?

标签: jmh

解决方案


坦率地说,我不知道cnt基准模式是如何计算的Mode.SampleTime,但我想澄清几件事。

首先,与 JMH 进行基准测试本质上是并发的。@Threads注释指定应分配十个线程来运行您的基准测试(默认为 4)。如果不指定@Threads,它将只分配一个线程进行基准测试。

其次,如果您将模式更改为Mode.Throughput并添加@Fork(value = 5)注释,您将看到cnt值为 50 的列。因为您的基准测试将在 5 个分叉中执行,每个分叉将有 10 次迭代。简单来说,cnt就是forkNumber * measurementIterations针对这种情况。

最后,当模式为Mode.SampleTime或使用@Param注释 ( cnt = numOfParams * forkNumber * measurementIterations) 时,此计算会发生变化。例如,如果您使用相同的注释 ( Mode.SampleTime) 运行不同的基准测试,您将在cnt列上看到不同的数字。

我希望它有帮助!


推荐阅读