Ich verwende jmh(), um eine Methode zu benchmarken. Ich habe auch die Menge von Parametern, die ich als Argumente verwenden möchte, um diese Methode auszuführen. Ist es möglich, eine Methode für jeden einzelnen Parameterwert zu generieren (mit Annotation @GenerateMicroBenchmark)?Wie generiere ich Methoden in jmh-Benchmarks?
Jetzt benutze ich die ähnliche Umsetzung, aber es ist nicht so praktisch, weil ich viel einheitlichen Code von Hand schreiben:
interface State {
int action();
void prepare();
}
class Method {
...;
toString() { return "State1_" + param; }
}
{
Method[] states;
curState = -1;
count = 0;
int[] params = {1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000, 11000, 12000};
for (int param: params) {
states[count++] = new Method(param);
}
}
@Setup(Level.Invocation)
public void prepareState() {
if (curState != -1) {
states[curState].prepare();
}
}
@GenerateMicroBenchmark
public int param_1000() {
curState = 0;
return states[curState].action();
}
@GenerateMicroBenchmark
public int param_2000() {
curState = 1;
return states[curState].action();
}
@GenerateMicroBenchmark
public int param_3000() {
curState = 2;
return states[curState].action();
}
...
@GenerateMicroBenchmark
public int param_12000() {
curState = 11;
return states[curState].action();
}