2012-02-26 5 views
8

में जेआईटी कंपाइलर बंद है या नहीं, मैं यह जानना चाहता हूं कि जेआईटी कंपाइलर बंद है या नहीं। मेरे पास निम्न कोड है जो जेआईटी कंपाइलर को बंद करने के लिए है। समस्या यह है कि, मुझे यकीन नहीं है कि यह वास्तव में ऐसा कर रहा है या नहीं। तो मैं सोच रहा था कि क्या यह जांचने का कोई तरीका है कि क्या जेआईटी बंद है या नहीं। मैंने कंपाइलर क्लास को देखा लेकिन isDisabled/enabled() जैसी कोई विधि नहीं है।जावा

कोड:

Compiler.disable(); 

कोई मदद या दिशा अत्यधिक सराहना की जाएगी।

+0

आप इसे _runtime_ पर देखना चाहते हैं? –

+0

हां, मैं इसे रनटाइम पर देखना चाहता हूं। – isaiah

+1

शायद मुझे यह भी जोड़ना चाहिए कि मैं ऐसा क्यों कर रहा हूं। असल में, हमारे पास एक ऐसा प्रोग्राम है जो डेटा के आकार के आधार पर एल्गोरिदम (उदा। क्विकॉर्ट) चलाने में कितना समय लगता है। हमने जो देखा वह यह था कि पहले दो बार वास्तव में अन्य परिणामों की तुलना में तिरछे हुए हैं और हम मानते हैं कि यह जेआईटी कंपाइलर की शुरुआत के कारण है। नतीजतन, हम उस समय पर प्रभाव देखना चाहते थे जब जेआईटी बंद हो। – isaiah

उत्तर

10

मुझे विश्वास नहीं है कि आप रनटाइम पर जेआईटी को बंद कर सकते हैं।

यदि आप जावा प्रोग्राम को गंभीरता से बेंचमार्क करना चाहते हैं, तो आपको निश्चित रूप से पहले कुछ रनों को अनदेखा करना चाहिए। जावा में विश्वसनीय मानक हो रही एक बेहद मुश्किल व्यापार है, सबसे अच्छा मैं

मैं Caliper, जो microbenchmarking के लिए गूगल पर आंतरिक रूप से उपयोग और JIT को गर्म करना के बारे में बहुत चालाक है है का उपयोग करना चाहिये ज्यादा आप अधिक चालाक या लोगों के लिए छोड़ दिया और सामान। विशेष रूप से, उदाहरण here देखें, जो दिखाता है कि विभिन्न इनपुट आकारों के लिए एल्गोरिदम की दक्षता को कैसे मापें।

+0

धन्यवाद लुईस। यह मेरे अंतिम वर्ष परियोजना के लिए है। हमने वास्तव में पहले कुछ रनों को अनदेखा करने पर भी विचार किया। मुझे लगता है कि यह अब के लिए सबसे आसान विकल्प है। मैं कैलिपर भी देखूंगा। – isaiah

+0

क्या प्रोजेक्ट आपके द्वारा मापने वाले एल्गोरिदम को कार्यान्वित कर रहा है, या यह बेंचमार्किंग कर रहा है? –

+0

यह मूल रूप से प्रतिबिंब का उपयोग कर उपयोगकर्ता के एल्गोरिदम चला रहा है और फिर ओ नोटेशन के संदर्भ में इसका विश्लेषण कर रहा है। इसके अलावा, आईबीएम की साइट पर मुझे क्या भ्रमित करता है (http://publib.boulder.ibm.com/infocenter/realtime/v1r0/index.jsp?topic=%2Fcom.ibm.rt.doc.10%2Frealtime%2Frt_jit .html), यह कहता है कि जेआईटी कंपाइलर को कैसे बंद करना है या क्या मैं संदेश को गलत व्याख्या कर रहा हूं? – isaiah

4

जब आप संकलित हो जाते हैं तो आप प्रिंटआउट विधियों को प्रिंट कर सकते हैं, '-XX: + प्रिंटकंपिलेशन अगर आपकी विधि मुद्रित नहीं होती है या प्रिंट होने के बाद अचानक तेज़ी से हो जाती है, तो आप संभावित कारण देख सकते हैं।

20

(नहीं अपने प्रश्न के लिए एक सीधा जवाब है क्योंकि यह आपके JIT कम्पाइलर बंद करने के लिए प्रोग्राम के रूप में की कोशिश कर रहे थे, लेकिन अपनी टिप्पणी के आधार पर, इस ब्याज की हो सकती है। लगता है) आप बंद करना चाहते हैं

एक सूर्य/Oracle JVM पर JIT कम्पाइलर, आप की कोशिश करनी चाहिए -Xint option:

-Xint

व्याख्या-ओनली मोड में संचालित। देशी कोड में संकलन अक्षम है, और सभी बाइटकोड दुभाषिया द्वारा निष्पादित किए जाते हैं। जावा हॉटस्पॉट क्लाइंट वीएम के अनुकूली कंपाइलर द्वारा प्रदान किए गए प्रदर्शन लाभ इस मोड में मौजूद नहीं होंगे।

+0

-Xint ब्रूनो पर जानकारी के लिए धन्यवाद। – isaiah

+0

जावा के किस संस्करण को यह समर्थित है? क्योंकि मुझे 'javac मिल रहा है: अवैध ध्वज: -Xint'। –

+0

@ErikAllik यह विकल्प विकल्पों में उपलब्ध है जब आप ओरेकल जेआरई 8 में 'जावा-एक्स' टाइप करते हैं। जेआईटी कंपाइलर का उपयोग करना है या नहीं, एक जेआरई निर्णय है, इसका स्रोत कोड को बाइटकोड में संकलित करने के साथ कुछ नहीं करना है (क्या' javac 'करता है): आपको शायद यह त्रुटि मिल रही है क्योंकि आप इसका उपयोग 'जावैक' नहीं 'जावा' के साथ कर रहे हैं। – Bruno

7

आईबीएम जेवीएम निश्चित रूप से जावा इंटरफ़ेस जावा/लैंग/कंपाइलर.disable() और .enable() का समर्थन करता है जो जावा 5 में पेश किया गया था, मुझे विश्वास है। इसमें वेबस्पेयर रीयल टाइम (जो एक जेवीएम है जो अधिक अनुमानित प्रदर्शन प्रदान करने के लिए डिज़ाइन किया गया है) साथ ही साथ हमारे "मानक" जेवीएम भी शामिल है। यदि आप अक्षम() को कॉल करते हैं, तो यह JIT संकलन को तब तक रोक देगा जब तक आप सक्षम() को कॉल नहीं करते।

मैं जेआईटी कंपाइलर टीम पर आईबीएम के लिए काम करता हूं। हम आमतौर पर लोगों को इस इंटरफेस का उपयोग करने की सलाह नहीं देते हैं, क्योंकि जेआईटी संकलन हेरिस्टिक के साथ हस्तक्षेप करना आम तौर पर एक अच्छा विचार नहीं है, लेकिन उचित वास्तविक समय परिदृश्य हैं जहां आप इसका उपयोग करेंगे।

6

लेख Performance Features and Tools में।

JIT कम्पाइलर पहले जावा डेवलपमेंट किट (JDK) 1.1.6 सॉफ्टवेयर रिलीज में एक प्रदर्शन अपडेट के रूप में उपलब्ध कराया गया था और अब एक मानक उपकरण लागू जब भी आप जावा में जावा दुभाषिया आदेश का उपयोग करें 2 मंच रिलीज।

आप जावा वीएम के -Djava.compiler=NONE विकल्प का उपयोग कर जेआईटी कंपाइलर को अक्षम कर सकते हैं।

तो, आप यह समझ सकते हैं कि जब चर सेट नहीं किया गया है, या किसी अन्य के अलावा कुछ सेट नहीं किया गया है, तो JIT सक्षम है।

+0

हां। यह काम कर रहा है। Djava.compiler के वर्तमान मूल्य को कैसे जानें? – apm