2013-03-09 6 views
5

मैंने एएसएम का उपयोग करके कुछ जावा बाइट कोड पीढ़ी की।
विज़िटर पैटर्न में किसी प्रकार के छोटे डीएसएल के एएसटी के किसी प्रकार के माध्यम से चलकर।
और मैं जेनरेट बाइट कोड के बारे में चिंता कर रहा हूं, यह भी 'सरल' है, यानी, 'संकलन-समय अनुकूलन' के बिना।
हालांकि मेरे मामले में, जेनरेट बाइट कोड अनुकूलित नहीं किया गया है, तो यह ठीक हो सकता है, फिर भी मैं पूछने में मदद नहीं कर सकता: क्या उन परियोजनाओं की आवश्यकता है जो बाइट कोड अनुकूलन करने के लिए रनटाइम पर बाइट कोड उत्पन्न करते हैं?
मुझे यह तथ्य पता है कि जेवीएम के लिए, कार्यक्रम के चलते अधिकांश 'ऑप्टिमाइज़ेशन' काम किया जाता है, जिट संकलन द्वारा। तो संकलन समय पर बाइटकोड अनुकूलन थोड़ा प्रभाव डाल सकता है।
लेकिन, वास्तव में? क्या यह फ्लाई पर उत्पन्न बाइटकोड के लिए बाइटकोड अनुकूलन करने के लिए बिल्कुल अर्थहीन है? अंतर के बारे में कुछ अनुभव साझा करने के लिए कोई भी है, मुख्य रूप से रनटाइम प्रदर्शन में, बाइटकोड के बीच और बिना किसी ऑप्टिमाइज़ेशन के?गतिशील रूप से जेनरेट किए गए जावा बाइट-कोड को किसी भी अनुकूलन की आवश्यकता है?

+0

आप एक उदाहरण को हार्डकोड करने और इसे अपने बाइटकोड जनरेटर के खिलाफ रेसिंग करने का प्रयास कर सकते हैं ... –

+0

यदि आपका कोड का टुकड़ा अक्सर नहीं चलाया जाता है, तो इसे जेआईटी द्वारा अनुकूलित नहीं किया जाएगा, लेकिन इससे कोई फर्क नहीं पड़ता क्योंकि यह नहीं है अक्सर चलाओ। और यदि यह अक्सर चलाता है, तो इसे अनुकूलित किया जाएगा। सब खुश हैं। – assylias

+0

कृपया इसे http://stackoverflow.com/a/1680212/655756 देखें। दूसरे शब्दों में, आप और अनुकूलन कर सकते हैं, लेकिन यह आवश्यक नहीं है क्योंकि आम तौर पर उन अनुकूलन "कॉस्मेटिक" की तरह दिखते हैं। – n1ckolas

उत्तर

2

मुझे कम से कम एक जेवीएम आधारित भाषा पता है, जो साझा नामहीन रहता है, नरक के रूप में धीमा है। यह कुछ संकलन समय अनुकूलन का उपयोग कर सकता था।

जैवैक और जेवीएम लगभग उसी प्रोग्रामिंग मॉडल का विश्लेषण कर रहे हैं, इसलिए जैवैक द्वारा नियोजित कोई भी ऑप्टिमाइज़ेशन तकनीक जेवीएम द्वारा भी नियोजित की जा सकती है। तब जावैक के काम को डुप्लिकेट करने के लिए बहुत कुछ नहीं है। दरअसल यह शायद पसंद किया जाता है कि जावैक जितना संभव हो सके स्रोत कोड की संरचना को छोड़ देता है ताकि JVM कोड के बारे में बेहतर कारण हो सके।

यदि स्रोत भाषा जावा-आईश भाषा नहीं है तो यह लागू नहीं होता है।

इसके बारे में सोचें, सीपीयू बहुत बढ़िया अनुकूलन भी करता है, तो JVM को कोई अनुकूलन करने की आवश्यकता क्यों है? इसे सब सीपीयू में क्यों न छोड़ें। क्योंकि सीपीयू और जेवीएम बहुत अलग कोड का विश्लेषण कर रहे हैं। सीपीयू मशीन निर्देशों के मनमाने ढंग से अनुक्रम का विश्लेषण कर रहा है (हालांकि यह उच्च स्तरीय भाषाओं के सामान्य व्यवहार के आधार पर धारणाएं बना सकता है)। जेवीएम एक बहुत ही विशिष्ट, उच्च स्तर की भाषा का विश्लेषण कर रहा है, जेवीएम कोड के आधार पर कोड को तर्क और रूपांतरित कर सकता है जो मशीन निर्देशों से सीपीयू के लिए लगभग असंभव है।

अपने मामले पर वापस जाएं, यह संभव है कि, आप (कंपाइलर के रूप में) अपनी उच्च-स्तरीय स्रोत भाषा के बारे में बहुत बेहतर जानते हैं, आप रूपांतरणों को JVM द्वारा असंभव कर सकते हैं।

+0

महान स्पष्टीकरण! मुझे लगता है कि मैं तुम्हारी बात समझ गया, यह मुझे परेशान करता है। इसलिए, यदि मेरा डीएसएल एक उच्च प्रोग्रामिंग मॉडल पेश करता है - उदाहरण के लिए 'नियम इंजन' के कुछ रूप में बुलियन तर्क, मैं 'गेट लॉजिक ऑप्टिमाइज़ेशन' जैसे बूलियन तर्क सिद्धांत में कुछ अनुकूलन कर सकता हूं। लेकिन अगर मेरा डीएसएल सिर्फ एक और encapsulated अनिवार्य प्रोग्रामिंग भाषा है, जैसे जावा की तरह, कोई अनुकूलन करने की कोई ज़रूरत नहीं है, है ना? –

0

नहीं, यह आवश्यक नहीं है।

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

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