2010-10-27 13 views
5

जस्ट इन टाइम संकलन में कई सैद्धांतिक फायदे हैं: इसमें मशीन, झंडे की स्थिति और कोड का उपयोग कैसे किया जाता है, इसके बारे में अधिक जानकारी है। यह आपको विकास चक्र को तेज करने, चलाने से पहले समय लेने वाली संकलन से बचने की अनुमति देता है।जेआईटी संकलन के डाउनसाइड्स क्या हैं?

सरलीकृत रूप से, जेआईटी संकलन एक दृष्टिकोण के रूप में बेहतर लगता है; कुछ ओवरहेड है, लेकिन यदि पर्याप्त रूप से स्मार्ट यह आपके कोड को ऑफ़सेट करने के लिए पर्याप्त तेज़ी से बढ़ा सकता है।

हालांकि, मुझे नहीं लगता कि यह पूरी कहानी है। सैद्धांतिक और व्यावहारिक डाउनसाइड्स क्या हैं? हां, "धीरे-धीरे स्टार्टअप समय" का उल्लेख अक्सर किया जाता है, जैसा कि "स्मृति की खपत में वृद्धि" है, लेकिन मुझे आश्चर्य है कि उससे अधिक है या नहीं।

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

ऐसा लगता है कि किसी ने इस पर एक पत्र लिखा है या जेआईटी में निहित समस्याओं को हल करने पर। अगर किसी के पास माप है, तो सब बेहतर है।

संपादित करें: मैं समय संकलन (संभावित रूप से प्रतिक्रिया निर्देशित अनुकूलन के साथ) की तुलना में जस्ट इन टाइम संकलन के बारे में बात कर रहा हूं, व्याख्या की तुलना में नहीं।

उत्तर

1

यदि जेआईटी ठीक से काम कर रहा है, तो कोई वास्तविक नुकसान नहीं है। ऐसा कहकर, सूर्य को हॉटस्पॉट को स्थिर करने में काफी समय लगा है क्योंकि यह बेहद जटिल है। साथ बेंचमार्क डेटा के संबंध में, आप हमेशा निम्नलिखित प्रयोग चला सकते हैं:

भागो SPECjbb, SPECjvm, या अपने स्वयं बेंचमार्क और कमांड लाइन है कि java कार्यान्वित संशोधित शामिल करने के लिए:

-Xint 

यह किसी भी क्रम को बाहर निकाल देगा घटना से संकलन।

+0

क्षमा करें। बेशक, एक अच्छा जेआईटी व्याख्या से काफी निश्चित रूप से बेहतर है, लेकिन मैं जेआईटी बनाम एओटी संकलन के बारे में बात कर रहा हूं। –

0

मुख्य समस्या यह है कि वर्तमान में वीएम लोड होना चाहिए - यह एक संपूर्ण कंपाइलर और रनटाइम को स्मृति में लोड कर रहा है, इसलिए यह जल्दी नहीं होगा।

एक बार लोड होने के बाद, संकलन और प्रोफाइलिंग लंबे समय तक पृष्ठभूमि में की जा सकती है और सैद्धांतिक रूप से रनटाइम स्थिति फिट करने के लिए हाथ-अनुकूलन द्वारा किसी भी स्थिर रूप से संकलित भाषा से सैद्धांतिक रूप से तेज हो सकती है। (उस मामले के बारे में सोचें जहां कोई फ़ंक्शन किसी दुष्प्रभाव के लिए निर्धारित नहीं होता है और बाहरी डेटा पर भरोसा नहीं करता है जिसे एक ही पैरामीटर के साथ 50 बार एक सेकंड कहा जाता है - एक गतिशील रूप से संकलित भाषा बस स्थिरता को वापस सीखना सीख सकती है। यह कुछ है एक स्थिर रूप से संकलित भाषा सामान्य रूप से सामान्य रूप से नहीं कर सकती है।)

ध्यान दें कि यह हमेशा वीएम के साथ कोई समस्या नहीं होने वाला है, अगर वे ओएस में वीएम बनाने शुरू करते हैं और कई ऐप्स में वीएम का पुन: उपयोग करते हैं, तो यह समस्या होगी दूर।

इसके अलावा वीएम बाइटकोड बहुत कम बाइट्स के साथ और अधिक करने के लिए जाता है। यही कारण है कि माइक्रोसॉफ्ट ने शुरुआत में एक्सेल/वर्ड (प्री-जावा) में वीएम का इस्तेमाल किया था, यह कोड आकार को कम करने के लिए था।

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

मेरा मुद्दा? कोई सहज कमी नहीं है, और मुख्य वास्तविक दुनिया की कमी लोड-टाइम है।

ओह, एक और असली दुनिया की कमी, जावा और सी # ढेर पर सभी वस्तुओं को आवंटित करते हैं। सीए ++ की तुलना में हीप आवंटन सी #/जावा में बहुत तेज है, लेकिन फिर भी आवंटन गति को ढेर करने के लिए नहीं है।

+0

सरलीकृत, लेकिन मुझे लगता है कि अभी भी मान्य है (इस तथ्य को छोड़कर कि वीएम भाषाओं में वास्तव में "ढेर" नहीं है, लेकिन यह वही शुद्ध प्रभाव है, स्मृति जो हमेशा के लिए लटकती है - मैं जावा पर सी # से भी बेहतर हूं, सी # आवंटन की अनुमति देता है, मुझे नहीं पता)। –

1

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

यह व्यवहार्य है। लेकिन पूरे अनुकूलन गेम औसत मामले औसत मामले में सर्वोत्तम परिणाम प्राप्त करने के लिए विभिन्न कारकों से व्यापार करने के बारे में है। अधिकांश अनुप्रयोगों में अपेक्षाकृत गर्म और ठंडे पथ होते हैं, भले ही गर्म पथ मानक वर्ग पुस्तकालयों में हों।

इसके अलावा आप प्रभावी ढंग से कह रहे हैं कि यह काल्पनिक अनुप्रयोग जेआईटी संकलन के लायक नहीं है। उस स्थिति में, "फिक्स" इसे जेआईटी संकलन के साथ बंद करना होगा।

ऐसा लगता है कि किसी ने इस पर एक पत्र लिखा है या जेआईटी में निहित समस्याओं को हल करने पर।

आपने ऐसा सोचा होगा।

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

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