1つのカスタム実装を含む、いくつかのマップ実装のベンチマークを書きたいと思います。私は広範囲の入力に対して平均してどのように動作するかをテストしたい。1つのベンチマーク内での広範囲の入力の使用
これは初めてJMHを使用するため、@Paramを使用することは明らかな選択肢のように見えました。しかし、JMHは単一のベンチマークでこれらのさまざまな入力をすべて使用することはないが、各パラメータのセットごとに別々のベンチマークを実行することになります。
私は行方不明になっているか、ベンチマークでここでやりたいと思っている入力範囲をループしているだけなのですか?
アップデート:
私は全く逆の比較結果与える2つの異なるベンチマーク、実装(注:これはキーとして三次元の座標を使用して、特別な地図(Mapインタフェースを実装していない)です)。
のみ1つの値を毎回取得と異なる値を毎回取得するために状態を使用したベンチマーク@Benchmark
public void benchmarkGet(Blackhole bh){
//8*20 different starting positions
for(int i = 0;i < 8 * 20;i++){
for(int x = 0;x < 20;x++){
for(int y = 0;y < 20;y++){
for(int z = 0;z < 20;z++){
Object value = map.get(x + offsets[i][0], y + offsets[i][1], z + offsets[i][2]));
bh.consume(value);
}
}
}
}
}
に入力の範囲にわたりループ
:
@Benchmark @OutputTimeUnit(value = TimeUnit.MICROSECONDS) public void benchmarkGet(Blackhole bh) { Object value = map.get(x + offsets[i][0], y + offsets[i][1], z + offsets[i][2])); bh.consume(value); x++; if (x > 20) { y++; x = 0; if (y > 20) { z++; y = 0; if (z > 20) { i++; z = 0; if (i >= 8*20) { i = 0; } } } } }
1つは正しいですか?
一部のコードを表示 – dit
注:これはまた、この質問に似ています:http://stackoverflow.com/questions/24496949/benchmarking-java-hashmap-get-jmh-vs-loopingしかし、私の答えはありません質問:正しい方法は何ですか、私はどちらを信頼すべきですか? – Barteks2x