जेएमएच के साथ खेलते समय मैं एक अजीब चीज में आया जो मैं समझा नहीं सकता।क्यों (एन मॉड कॉन्स) (कॉन्स मॉड एन) से तेज है?
@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, वीएम 25.101-B13, इंटेल (आर) कोर (टीएम) i7-4770 सीपीयू @ 3.40GHz (परिवार पर चल रहा हैं: 0x6, मॉडल: 0x3c, stepping: 0x3)
यदि मैं मान के बराबर कांस्ट सेट करता हूं या यदि मैं मान को 0xffffffff
पर सेट करता हूं, तो कुछ भी नहीं बदलता है।
एक समान% संख्या को चलाने के लिए प्रयास करें, जबकि वे बराबर हैं और मुझे परिणाम दिखाएं :) – Erik
क्या होता है यदि आप 'मूल्य' 12345 पर सेट करते हैं और 1230 का उपयोग अपने निरंतर के रूप में करते हैं? – GriffeyDog
मैंने प्रश्न में अतिरिक्त जानकारी जोड़ दी। इससे कोई फर्क नहीं पड़ता कि 'const' और' value' के मान क्या हैं। – Slonopotamus