jmhで遊んでいる間、私は奇妙なことを見つけました。私は説明できません。なぜ(n mod const)が(const mod n)より速いのですか?
@BenchmarkMode(Mode.SingleShotTime)
@Measurement(iterations = 10, batchSize = Integer.MAX_VALUE)
@Warmup(iterations = 5, batchSize = Integer.MAX_VALUE)
@State(Scope.Thread)
public class Tests {
private int value;
@Setup(Level.Iteration)
public void setUp() {
value = 1230;
}
@Benchmark
public boolean testConstModN() {
return 12345 % value == 0;
}
@Benchmark
public boolean testNModConst() {
return value % 12345 == 0;
}
}
結果は
Benchmark Mode Cnt Score Error Units
Tests.testConstModN ss 10 10.789 ± 0.305 s/op
Tests.testNModConst ss 10 7.550 ± 0.067 s/op
私はJDK 1.8.0_101、VM 25.101-B13、インテル(R)Core(TM)i7-4770 CPUする@ 3.40GHz(ファミリ上で実行しています以下であります: 0x6、モデル:0x3c、ステッピング:0x3)
constに等しい値を設定するか、値を0xffffffff
に設定しても何も変わりません。
等価であるのにCONST%を実行してみてください。 – Erik
'value'を12345に設定し、1230を定数として使うとどうなりますか? – GriffeyDog
質問に追加情報を追加しました。 'const'と' value'の値が何であるかは関係ありません。 – Slonopotamus