2009-04-29 14 views
6

Noक्या मुझे जावा कंपाइलर द्वारा उत्पादित बाइटकोड देखना चाहिए?

  • JIT कम्पाइलर कुछ पूरी तरह से अलग में बाईटकोड "परिणत" हो सकता है वैसे भी।
  • इससे आपको समयपूर्व अनुकूलन करने का मौका मिलेगा।

Yes

  • आप नहीं जानते कि कौन सी विधि JIT द्वारा संकलित किया जाएगा, इसलिए यदि आप उन सब का अनुकूलन यह बेहतर है।
  • यह आपको एक बेहतर जावा प्रोग्रामर बना देगा।

मैं वास्तव में बिना पूछे (पूछताछ) पूछ रहा हूं इसलिए जेआईटी हाइपरलिंक पर रीडायरेक्ट करने के लिए स्वतंत्र महसूस करें।

उत्तर

17

हां, लेकिन कुछ हद तक - यह एक शैक्षिक अवसर के रूप में अच्छा है कि यह देखने के लिए कि हुड के नीचे क्या चल रहा है, लेकिन शायद संयम में किया जाना चाहिए।

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

उदाहरण के लिए, अगर एक स्ट्रिंग संयोजन किया जाता है, javac संयोजन एक StringBuilder का उपयोग करने और String रों श्रेणीबद्ध करने के लिए append तरीकों प्रदर्शन में अनुकूलित करेंगे।

हालांकि, अगर स्ट्रिंग संयोजन एक पाश में किया जाता है, एक नया StringBuilder प्रत्येक यात्रा पर मैन्युअल रूप से पाश के बाहर एक StringBuilder instantiating के लिए और केवल पाश अंदर append रों प्रदर्शन की तुलना में instantiated जा सकता है, संभव निष्पादन में कमी के लिए अग्रणी।

जेआईटी के मुद्दे पर। जस्ट-इन-टाइम संकलन जेवीएम कार्यान्वयन विशिष्ट होने जा रहा है, इसलिए यह पता लगाना बहुत आसान नहीं है कि वास्तव में बाइटकोड में क्या हो रहा है जब इसे देशी कोड में परिवर्तित किया जा रहा है, और इसके अलावा, हम यह नहीं बता सकते कि कौन से हिस्से JITted जा रहे हैं (कम से कम कुछ JVM- विशिष्ट उपकरण के बिना यह देखने के लिए कि किस प्रकार का जेआईटी संकलन किया जा रहा है - मुझे इस क्षेत्र में कोई विशिष्ट जानकारी नहीं है, इसलिए मैं अनुमान लगा रहा हूं।)

उस ने कहा, JVM बाइटकोड को निष्पादित करने जा रहा है, जिस तरह से इसे निष्पादित किया जा रहा है वह डेवलपर के लिए कम या ज्यादा अपारदर्शी है, और फिर, JVM- विशिष्ट। कुछ प्रदर्शन चाल हो सकती हैं जो एक JVM करता है जबकि दूसरा नहीं करता है।

जब यह उत्पन्न बाईटकोड को देखने का मुद्दा करने के लिए नीचे आता है, यह सीखने क्या वास्तव में स्रोत कोड के लिए हो रहा है जब यह बाईटकोड को संकलित किया गया है करने के लिए नीचे आता है। कंपाइलर द्वारा किए गए अनुकूलन के प्रकारों को देखने में सक्षम होने के नाते, लेकिन यह भी समझते हुए कि संकलक अनुकूलन करने के तरीके की सीमाएं हैं।

सब कहा, मैं यह एक बहुत अच्छा विचार बाईटकोड पीढ़ी के बारे में जुनूनी बनने के लिए है नहीं लगता और कार्यक्रमों है कि सबसे अधिक अनुकूलित बाईटकोड उत्सर्जित करेगा लिखने की कोशिश कर रहा है। जावा स्रोत कोड लिखना और अधिक महत्वपूर्ण है जो दूसरों द्वारा पठनीय और रखरखाव योग्य है।

4

यह पूरी तरह से निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं। यदि आप किसी विधि/मॉड्यूल को अनुकूलित करने का प्रयास कर रहे हैं, तो बाइट कोड को देखते हुए आपके समय का अपशिष्ट होगा। अपनी बाधाओं को कहां ढूंढने के लिए पहले प्रोफ़ाइल करें, फिर बाधाओं को अनुकूलित करें। यदि आपकी बाधा उतनी तंग लगती है जितनी संभवतः हो सकती है और आपको इसे तेज़ी से बनाने की आवश्यकता है, तो आपके पास मूल कोड और जेएनआई के साथ इंटरफ़ेस में फिर से लिखने के अलावा कोई विकल्प नहीं हो सकता है।

जेनरेट किए गए बाइटकोड को अनुकूलित करने का प्रयास करने में थोड़ा मदद मिलेगी, क्योंकि जेआईटी कंपाइलर बहुत काम करेगा, और आपको यह नहीं पता होगा कि यह वास्तव में क्या कर रहा है।

1

मुझे ऐसा नहीं लगता। जावैक कंपाइलर को डीबग करने या ब्याज के मामले के रूप में जानना चाहते हैं, मैं एक अच्छे कारण के बारे में नहीं सोच सकता कि क्यों कोई बाइटकोड उत्पन्न होता है।

को जानने का बाईटकोड आप एक बेहतर जावा प्रोग्रामर जानते हुए भी कैसे एक आंतरिक दहन इंजन काम करता है आप एक बेहतर चालक कर देगा से किसी भी अधिक नहीं होगा।

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

+0

लेकिन कोल मिलने एक बेहतर चालक बन गया एक बार वह कार internals के बारे में सीखा। – Boune

0

जब तक कि आप किसी प्रकार का उच्च-क्षमता सर्वर विकसित नहीं कर रहे हैं, तो आपको जिज्ञासा को छोड़कर बाइटकोड की जांच करने की आवश्यकता नहीं होगी। स्रोत कोड जो आपके संगठन में स्वीकार्य कोडिंग प्रथाओं का पालन करता है, अधिकांश अनुप्रयोगों के लिए पर्याप्त प्रदर्शन प्रदान करेगा।

प्रदर्शन से अधिक चिंता जब तक आप लोड परीक्षण आपके आवेदन (या पूरी ग्राहक सेवा शक्ति है कि स्क्रीन है कि "हमेशा के लिए" लेता है लोड करने के लिए आप lynches) के बाद मुद्दों मिल गया है मत करो। फिर, बाधाओं पर दूर हथियार लें और शेष कोड अकेले छोड़ दें।

Bytecode को समझने के लिए एक मामूली सीखने की अवस्था की आवश्यकता है। निश्चित रूप से, यह और जानने के लिए कभी दर्द नहीं होता है, लेकिन व्यावहारिकता यह आवश्यक होने तक इसे बंद करने का सुझाव देती है। (और उस पल में आना चाहिए, मैं किसी को आप गुरु को खोजने की सलाह देते हैं।)

+0

बाइटकोड की जांच शायद ही आपको प्रदर्शन के बारे में बताएगी। (जहां जावैक कुछ उच्च स्तर कर रहा है - स्ट्रिंग कॉन्सटेनेशन और मुक्केबाजी)। –

संबंधित मुद्दे