JMH - getPrimaryResults和getSecondaryResults的区别

4

RunResults类中的getPrimaryResultsgetSecondaryResults方法有什么区别?在JMH中,这两个方法是干什么用的?

1个回答

2
我还没有在代码层面上验证过,但据我所知,主要结果是由JMH(时间测量)单独生成的数字,而次要结果是通过额外工具(如分析器)获得的。
更新:我刚才看到StackProfiler是JMH的一部分,这意味着我的定义并不完全正确。
更新2:与此同时,Aleksey Shipilev在他的评论中提供了一个更清晰的定义。
以下是从基准测试结果中提取的一些行。我使用“-prof stack”启动了基准测试。
[java] Iteration  10: 104439194.250 ±(99.9%) 7883662.439 ns/op
[java]                  ·stack: <delayed till summary>
...
[java]   118162555.108 ±(99.9%) 8317229.030 ns/op [Average]
[java]   (min, avg, max) = (102325413.750, 118162555.108, 149303159.000), stdev = 12448837.807
[java]   CI (99.9%): [109845326.078, 126479784.138] (assumes normal distribution)
...
[java] Secondary result "·stack":
[java] Stack profiler:
[java] ....[Thread state distributions]....................................................................
[java]  87.3%         RUNNABLE
[java]  12.7%         WAITING
[java] ....[Thread state: RUNNABLE]....................................................................    ....
[java]  82.3%  94.3% sun.management.ThreadImpl.getThreadTotalCpuTime0

正如您所看到的,堆栈分析器的结果被标记为二级结果。希望这可以帮助一点。


谢谢 +1,我会稍微研究一下并回来接受答案! - El Marce
2
换句话说,“主要”结果是测试的实际 主要性能结果。“次要”结果是辅助数据:分析器结果、非对称子测试结果等。每个测试只有一个主要结果,但可能有许多次要结果。 - Aleksey Shipilev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接