代码之家  ›  专栏  ›  技术社区  ›  Glide

jmh结果中的cnt列是什么?

jmh
  •  0
  • Glide  · 技术社区  · 6 年前

    在我的JMH课上,我用

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

    在班级一级。

    在结果中, cnt 一种方法见第132栏,另一种方法见第155栏。我在假设 碳纳米管 可能意味着处决的数量,但这些数字与我的预期不符。

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

    2 回复  |  直到 6 年前
        1
  •  1
  •   ulubeyn Ayesha Fatima    6 年前

    坦白说,我不知道 cnt 在基准模式为 Mode.SampleTime ,但我想澄清一些事情。

    首先,与jmh的基准测试本质上是并行的。这个 @Threads 注释指定应该分配10个线程来运行基准测试(默认值为4)。如果您没有指定 @线程 ,它将只分配一个线程用于基准测试。

    其次,如果你把模式改成 Mode.Throughput 并添加 @Fork(value = 5) 注释,你会看到 碳纳米管 值为50的列。因为您的基准测试将在5个fork中执行,每个fork将有10个迭代。简单地说, 碳纳米管 forkNumber * measurementIterations 为了这个案子。

    最后,当模式为 模式.采样时间 或者当你使用 @Param 注释(注释) cnt = numOfParams * forkNumber * measurementIterations )例如,如果使用相同的注释运行不同的基准测试( 模式.采样时间 )上会看到不同的数字 碳纳米管 列。

    希望有帮助!

        2
  •  1
  •   Nitsan Wakart    6 年前

    你的前提是:

    10 (threads) * 10 (iterations) = 100 = number of executions

    不正确。

    基准测试方法将从10个线程中重复运行10次度量迭代,每次迭代的长度为每秒1次。如果该方法只需1秒,则执行次数将匹配。报道 cnt 是执行的次数 样品 收集。这个 sample 模式不一定对方法的每次执行都计时。如果这个方法花费的时间很短的话,有一个启发式的方法可以让它后退。

    推荐文章