我正在开展一个maven项目。场景如下所示......
class Test {
public void applyAll() {
....................
....................
Collection<Migratable> applicableUpdates = SomeOtherClass.getApplicableUpdates();
doUpdate(applicableUpdates);
}
@Benchmark
public void apply(Migratable m) {
....................
....................
}
private void doUpdate(Collection<Migratable> applicableUpdates) throws Exception {
for (Migratable m : applicableUpdates) {
try {
apply(m);
} catch (Exception e) {
logger.error("Falid to apply migration {}" + m, e);
throw e;
}
}
}
}
我需要计算执行每次迁移所需的时间。我只需要计算 apply(Migratable m)方法的执行时间。
现在,当我使用&#34; mvn clean install&#34;构建我的项目时,构建失败并显示&#34;方法参数应为@State classes&#34;。
这里,参数来自另一种方法 doUpdate(Collection applicableUpdates) [见场景]。那么如何在给定的场景中摆脱这个错误呢?
答案 0 :(得分:2)
你的设置中存在很多问题,看起来你还没有真正看过JMH的样本;我强烈建议你这样做。
一些笔记......
1)你@Benchmark
方法返回void - 它应该返回something
;否则使用BlackHoles
(这在样本中)。
2)如果参数来自另一种方法,则意味着该方法应该是@SetUp
方法(这在样本中)
3)您看到的错误与Migratable
实际上不是@State
类的事实有关(这在样本中也是如此!)
此时我无法强调这一点 - 但看看并了解样本。这不是一件容易的事,这是微基准测试,尽管JMH试图通过隐藏所有非常复杂的代码来让事情变得更容易,但它仍然要求我们遵守那里存在的规则。