जावा हॉटस्पॉट के रचनाकारों से माइक्रो बेंचमार्क लिखने के बारे में सुझाव :
नियम 0: जेवीएम और माइक्रो-बेंचमार्किंग पर एक प्रतिष्ठित पेपर पढ़ें। एक अच्छा ब्रायन Goetz, 2005 है । माइक्रो-बेंचमार्क से बहुत अधिक उम्मीद न करें; वे जेवीएम प्रदर्शन विशेषताओं की केवल सीमित सीमा को मापते हैं।
नियम 1: हमेशा एक वार्मअप चरण शामिल करें जो आपके परीक्षण कर्नेल को सभी तरह से चलाता है, समय चरण (ओं) से पहले सभी प्रारंभिकताओं और संकलनों को ट्रिगर करने के लिए पर्याप्त है। (वार्मअप चरण में कुछ पुनरावृत्तियाँ ठीक हैं। अंगूठे का नियम कई दसियों हज़ार इनर लूप पुनरावृत्तियों का है।)
नियम 2: हमेशा साथ रखें -XX:+PrintCompilation
, -verbose:gc
आदि, इसलिए आप यह सत्यापित कर सकते हैं कि आपके समय के चरण के दौरान जेवीएम के कंपाइलर और अन्य हिस्से अप्रत्याशित काम नहीं कर रहे हैं।
नियम 2.1: समय और वार्मअप चरणों की शुरुआत और अंत में संदेश प्रिंट करें, ताकि आप यह सत्यापित कर सकें कि समय चरण के दौरान नियम 2 से कोई आउटपुट नहीं है।
नियम 3: के बीच अंतर के प्रति सचेत रहें -client
और -server
, और OSR और नियमित रूप से संकलन। -XX:+PrintCompilation
झंडा एक पर हस्ताक्षर के साथ OSR संकलन रिपोर्ट उदाहरण के लिए, गैर प्रारंभिक प्रवेश बिंदु को निरूपित करने के: Trouble$1::run @ 2 (41 bytes)
। क्लाइंट के लिए सर्वर को प्राथमिकता दें, और यदि आप सर्वश्रेष्ठ प्रदर्शन के बाद भी OSR के लिए नियमित हैं।
नियम 4: आरंभिक प्रभावों से अवगत रहें। अपने लोडिंग चरण के दौरान पहली बार प्रिंट न करें, क्योंकि लोडिंग और कक्षाएं शुरू करता है। वार्मअप चरण (या अंतिम रिपोर्टिंग चरण) के बाहर नई कक्षाएं लोड न करें, जब तक कि आप विशेष रूप से वर्ग लोडिंग का परीक्षण नहीं कर रहे हैं (और उस स्थिति में केवल परीक्षण कक्षाएं लोड करें)। नियम 2 ऐसे प्रभावों के खिलाफ रक्षा की आपकी पहली पंक्ति है।
नियम 5: डीओपिटिमाइज़ेशन और पुनर्मूल्यांकन प्रभावों से अवगत रहें। टाइमिंग चरण में पहली बार कोई कोड पथ न लें, क्योंकि कंपाइलर कोड को रद्दी कर सकता है और पहले की आशावादी धारणा के आधार पर कोड को फिर से जोड़ सकता है, जो कि पथ का उपयोग करने वाला नहीं था। नियम 2 ऐसे प्रभावों के खिलाफ रक्षा की आपकी पहली पंक्ति है।
नियम 6: संकलक के दिमाग को पढ़ने के लिए उपयुक्त उपकरणों का उपयोग करें, और इसके द्वारा उत्पादित कोड से आश्चर्यचकित होने की उम्मीद करें। कुछ तेज या धीमा करने के बारे में सिद्धांतों को बनाने से पहले कोड का स्वयं निरीक्षण करें।
नियम 7: अपने माप में शोर को कम करें। एक शांत मशीन पर अपने बेंचमार्क को चलाएं, और कई बार इसे चलाएं, आउटलेर्स को त्याग दें। -Xbatch
अनुप्रयोग के साथ संकलक को क्रमबद्ध करने के लिए उपयोग करें , और -XX:CICompilerCount=1
संकलक को अपने साथ समानांतर में चलने से रोकने के लिए सेटिंग पर विचार करें । जीसी ओवरहेड को कम करने के लिए अपना सर्वश्रेष्ठ प्रयास करें, सेट Xmx
(बड़े पर्याप्त) के बराबर है Xms
और UseEpsilonGC
अगर यह उपलब्ध है तो उपयोग करें ।
नियम 8: अपने बेंचमार्क के लिए एक पुस्तकालय का उपयोग करें क्योंकि यह संभवतः अधिक कुशल है और पहले से ही इस एकमात्र उद्देश्य के लिए डिबग किया गया था। जैसे जावा के लिए जेएमएच , कैलिपर या बिल और पॉल की उत्कृष्ट यूसीएसडी बेंचमार्क ।