gpt4 book ai didi

java - 如何对 for 循环的每次迭代进行基准测试(使用 JMH)?

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:41 26 4
gpt4 key购买 nike

我已将 JMH 集成到我的 Maven 项目中。我可以对我的 doUpdate(Collection<Migratable> applicableUpdates) 进行基准测试方法成功

    @State(Scope.Thread)
public static class BenchmarkContext {

MigrationManager manager = new MigrationManager();
MigrationRegistry registry = new MigrationRegistry();
Collection<Migratable> applicableUpdates;

@Setup
public void initClient() {
applicableUpdates = registry.getApplicableUpdates(0);
}
}

@Benchmark
@Fork(1)
@Warmup(iterations = 1)
@Measurement(iterations = 5)
public void benchmarkDoUpdate(BenchmarkContext context) throws Exception {
context.manager.doUpdate(context.applicableUpdates);
}


现在,doUpdate(Collection<Migratable> applicableUpdates)方法调用另一个方法applyUpdate(Migratable migratable)在适用更新中每个列表元素(可迁移)的 for 循环内。

public void doUpdate(Collection<Migratable> applicableUpdates) throws Exception {
for (Migratable migratable : applicableUpdates) {
try {

applyUpdate(migratable);

} catch (Exception e) {
logger.error("Failed to apply migration {}" + migratable, e);
throw e;
}
}
}

我想进行基准测试 applyUpdate(Migratable migratable) 。我怎样才能做到这一点?
我不明白如何设置它的参数,因为它来自另一个方法 doUpdate(Collection<Migratable> applicableUpdates) 的列表。
或者有没有办法对 doUpdate(Collection<Migratable> applicableUpdates) 中 for 循环的每次迭代进行基准测试?

最佳答案

Or is there a way to benchmark each iteration of the for loop

您可以使用@OperationsPerInvocation(<integer>)告诉 JMH 您在 @Benchmark 中执行了多少个循环方法。缺点是它是一个注释 -> 因此参数只能在“开发时间”期间更改

I want to benchmark applyUpdate(Migratable migratable). How can I do that?

只需调用 applyUpdate(Migratable migratable)里面@Benchamrk方法而不是 doUpdate

<小时/>

IMO 进行基准测试没有意义 applyUpdate()使用可迁移列表,因为最终结果将是所有可迁移的平均时间,但 sme 可能需要很多时间,而其他可能几乎瞬间完成。因此这样的基准是没有用的。

关于java - 如何对 for 循环的每次迭代进行基准测试(使用 JMH)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43705256/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com