jmh - jmh 结果中的 cnt 列是什么?
问题描述
在我的 jmh 课程中,我正在使用
@BenchmarkMode(Mode.SampleTime)
@Measurement(iterations = 10)
@Threads(value = 10)
在班级层面。
在结果中,对于cnt
列,我看到一种方法为 132,另一种方法为 155。我假设cnt
可能意味着执行次数,但这些数字与我的预期不符。
执行次数不应该是 10(线程)* 10(迭代)= 100 吗?
解决方案
坦率地说,我不知道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
列上看到不同的数字。
我希望它有帮助!
推荐阅读
- go - 命名返回值上的延迟行为
- metpy - metpy.calc.advection TypeError:无效的索引器数组
- javascript - 使用 firebase.auth().oAuthStateChanged 在页面刷新时获取令牌 null
- selenium - 使用具有特定配置文件或扩展名的 Selenium 在 Robot Framework 中永久打开浏览器
- sql - postgreSQL-获取枚举的无效输入值错误
- angularjs - 错误:[$parse:ueoe] -- angularJs 中出现错误
- c - 问题将 C 代码从 32 位移植到 64 位:fread 导致访问冲突
- azure - Azure 应用备份创建部分备份
- python - 如何将 JSON 行转换为列
- c# - C# LINQ sort lambda 实现(逆时针排序 3d 点)