Trong khi chơi với jmh tôi đã gặp một điều kỳ lạ mà tôi không thể giải thích.Tại sao (n mod const) nhanh hơn (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;
}
}
Kết quả là dưới
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
Tôi đang chạy trên JDK 1.8.0_101, VM 25,101-b13, Intel (R) Core (TM) i7-4770 CPU @ 3.40GHz (gia đình: 0x6, model: 0x3c, bước: 0x3)
Nếu tôi đặt giá trị bằng giá trị hoặc nếu tôi đặt giá trị thành 0xffffffff
, không có gì thay đổi.
Cố gắng chạy số CONST% khi chúng bằng và hiển thị kết quả cho tôi :) – Erik
Điều gì sẽ xảy ra nếu bạn đặt 'giá trị' thành 12345 và sử dụng 1230 làm hằng số? – GriffeyDog
Tôi đã thêm thông tin bổ sung cho câu hỏi. Không quan trọng giá trị của 'const' và' value' là gì. – Slonopotamus