It is well known that using a loop inside your JMH benchmark is not a good idea because it will be optimized by the JIT compiler and should therefore be avoided. Is there a way to feed my JMH benchmark methods with different values of int
inputs (list of inputs) without using a loop.
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
Have a look at this example in the JMH documentation. You can use the @Param
annotation on a field in order to tell JMH to inject the values of this annotation:
@Param({"1", "2"})
public int arg;
@Benchmark
public int doBenchmark() {
return doSomethingWith(arg);
}
The benchmark is then run for both the values 1
and 2
.
Note how, if the annotated field is not a String
but a primitive, the values are parsed prior to assigment and are assigned in their converted forms. If you have multiple fields with the @Param
annotation, JMH will run the benchmark with any possible permutation of the field values.
You can also overridde the value assignment when defining a JMH runner.