迭代的时间是什么意思?
@Measurement(iterations = 50, time = 2)
如果测量的时间是固定的,如果测量的迭代时间超过 2 秒,迭代将停止?如果这是真的,这对测量有什么影响。
该问题的直接答案是:“我们必须提供迭代时间(或依赖默认的迭代时间),否则迭代将永远不会停止”。根据基准模式,迭代时间的含义可能会有所不同。例如,Javadoc 说:
/**
* <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
调用花费的时间比请求的迭代时间长,我们除了等待之外别无选择。
从文档中:
允许您提供实际的测试阶段参数。您可以指定迭代次数、每次迭代运行多长时间以及迭代中的测试调用次数(通常与 @BenchmarkMode(Mode.SingleShotTime) 一起使用来衡量一组操作的成本——而不是使用循环)。