JMH:约束参数 space
JMH: Constrain parameter space
假设我有一个带有两个参数的 JMH 测试:
@Param( { "1", "2", 4", "8", "16" } )
int param1;
@Param( { "1", "2", 4", "8", "16" } )
int param2;
是否有一种惯用的方法来对参数添加约束,例如仅针对 param1 < param2
?
的基准
从 @SetUp 抛出异常是可行的,但会增加输出的噪音。
不,目前还没有。如果您觉得注释有限制,您可以随时回退到 API。在那里,您可以执行以下操作:
for (int p1 = 1; p1 <= 16; p1 *= 2) {
for (int p2 = 1; p2 <= p1; p2 *= 2) {
Options opt = new OptionsBuilder()
...
.param("param1", p1)
.param("param1", p2)
.build();
RunResult r = new Runner(opt).runSingle();
... put r somewhere to process
}
}
(Maintainer 的观点:为 JMH 完成一个成熟的基于注释的 DSL 似乎并不值得,让用户在 Java 中编写他们的高级场景更简单)。
UPD:仔细想想,如果你想继续使用仅注释的方式,你可以将两个参数编码成一个 @Param
。
假设我有一个带有两个参数的 JMH 测试:
@Param( { "1", "2", 4", "8", "16" } )
int param1;
@Param( { "1", "2", 4", "8", "16" } )
int param2;
是否有一种惯用的方法来对参数添加约束,例如仅针对 param1 < param2
?
从 @SetUp 抛出异常是可行的,但会增加输出的噪音。
不,目前还没有。如果您觉得注释有限制,您可以随时回退到 API。在那里,您可以执行以下操作:
for (int p1 = 1; p1 <= 16; p1 *= 2) {
for (int p2 = 1; p2 <= p1; p2 *= 2) {
Options opt = new OptionsBuilder()
...
.param("param1", p1)
.param("param1", p2)
.build();
RunResult r = new Runner(opt).runSingle();
... put r somewhere to process
}
}
(Maintainer 的观点:为 JMH 完成一个成熟的基于注释的 DSL 似乎并不值得,让用户在 Java 中编写他们的高级场景更简单)。
UPD:仔细想想,如果你想继续使用仅注释的方式,你可以将两个参数编码成一个 @Param
。