1
下記のjmh-testを検討してください。その引数の幅広いための機能f
とg
ベンチマークするための最良の方法だろう何jmhベンチマークから状態を変更する際のベストプラクティス
@State(Scope.Thread)
public class Test {
private int value;
@Benchmark
public int testF() {
return f(value);
}
@Benchmark
public int testG() {
return g(value);
}
}
? @Param
は少数の異なる入力に対してのみ機能し、@Setup(Level.Invocation)
は結果の精度に影響を与える可能性があります。他の方法(入力配列を生成してベンチマーク内でインデックスを増やすなど)は、ベンチマーク方法から状態を変えることにつながります。
private int[] values;
private int index;
@Setup
private void generateValues() {
values = new int[0x10000];
...
index = 0;
}
private int nextValue() {
return values[index++ & 0xFFFF];
}
@Benchmark
private int testF() {
return f(nextValue());
}
状態をベンチマーク方法から変更することは一般的には悪い考えですか?