चूंकि जेवीएम युद्ध करता है तो समय की मात्रा अलग-अलग होगी। दूसरी बार जब आप इसे चलाते हैं तो हमेशा पहले की तुलना में तेज़ होगा। (पहली बार कक्षाओं को लोड करना और स्थैतिक ब्लॉक कॉल करना) 10,000 बार विधि चलाने के बाद यह फिर से तेज हो जाएगा (डिफ़ॉल्ट थ्रेसहोल्ड जिस पर यह देशी मशीन कोड को कोड संकलित करता है)
पुन: उत्पन्न करने योग्य औसत प्राप्त करने के लिए माइक्रो-बेंचमार्क के लिए समय, मेरा सुझाव है कि आप पहले 10,000 पुनरावृत्तियों को अनदेखा करें और इसके बाद 2-10 सेकंड के लिए इसे चलाएं।
उदा।
long start = 0;
int runs = 10000; // enough to run for 2-10 seconds.
for(int i=-10000;i<runs;i++) {
if(i == 0) start = System.nanoTime();
// do test
}
long time = System.nanoTime() - start;
System.out.printf("Each XXXXX took an average of %,d ns%n", time/runs);
बहुत महत्वपूर्ण: प्रति विधि इन लूपों में से केवल एक ही करें। ऐसा इसलिए है क्योंकि यह पूरी विधि को अनुकूलित करता है कि इसका उपयोग कैसे किया जाता है। यदि आपके पास एक व्यस्त लूप है तो बाद के लूप धीमे दिखाई देंगे क्योंकि वे नहीं चलते हैं और खराब तरीके से अनुकूलित किए जाएंगे।
स्रोत
2011-09-19 07:23:51
हां लेकिन कोई भी जो वास्तव में 'CPU समय' को मापने के तरीके पर अपने प्रश्न का उत्तर नहीं देता है। –