为什么我们必须确定每次测量迭代的持续时间?

时间:2015-04-01 12:51:57

标签: java jmh

迭代的时间是什么意思?

@Measurement(iterations = 50, time = 2)

如果测量时间固定,如果测量的迭代时间超过2秒,迭代将会停止吗?如果这是真的,这会对测量产生什么影响。

2 个答案:

答案 0 :(得分:1)

来自documentation

  

允许您提供实际的测试阶段参数。您可以指定迭代次数,运行每次迭代的时间以及迭代中的测试调用次数(通常与@BenchmarkMode(Mode.SingleShotTime)一起使用来测量一组操作的成本 - 而不是使用循环)。

答案 1 :(得分:1)

对这个问题的直截了当的回答是:"我们必须提供迭代时间(或依赖于默认的迭代时间),否则迭代永远不会停止"。根据基准模式,迭代时间的含义可能不同。例如,Javadoc says

/**
 * <p>Throughput: operations per unit of time.</p>
 *
 * <p>Runs by continuously calling {@link Benchmark} methods,
 * counting the total throughput over all worker threads. 
 * This mode is time-based, and it will run until the iteration
 * time expires.</p>
 */
Throughput("thrpt", "Throughput, ops/time"),

没有办法阻止Java中的不合作执行,除非杀死VM。 (中断线程需要合作:应该检查中断)。因此,如果@Benchmark调用花费的时间超过请求的迭代时间,除了等待它之外我们没有其他选择。