अनिवार्य रूप से किसी भी प्रोग्राम का प्रदर्शन अगर इसे संकलित किया जाता है, प्रोफाइलिंग के साथ निष्पादित किया जाता है, और परिणाम दूसरे पास के लिए कंपाइलर में वापस खिलाया जाता है। वास्तव में उपयोग किए जाने वाले कोड पथ अधिक आक्रामक रूप से अनुकूलित किए जाएंगे, लूप बिल्कुल सही डिग्री तक अनलॉक हो जाएंगे, और गर्म निर्देश पथ I $ हिट को अधिकतम करने के लिए व्यवस्थित किए जाएंगे।
सभी अच्छी चीजें, फिर भी यह लगभग कभी नहीं किया जाता है क्योंकि बाइनरी बनाने के लिए कई कदमों से गुजरना परेशान होता है।
यह मूल कोड में संकलित करने से पहले बाइटकोड चलाने का लाभ है: प्रोफाइलिंग जानकारी स्वचालित रूप से उपलब्ध होती है। जस्ट-इन-टाइम संकलन के बाद परिणाम प्रोग्राम को संसाधित करने वाले विशिष्ट डेटा के लिए अत्यधिक अनुकूलित देशी कोड है।
बाइटकोड चलाने में सक्षम होने के कारण एक स्थिर कंपाइलर सुरक्षित रूप से उपयोग करने से अधिक आक्रामक देशी अनुकूलन को सक्षम बनाता है। उदाहरण के लिए यदि किसी फ़ंक्शन के तर्कों में से एक हमेशा हमेशा पूर्ण होता है, तो उस तर्क के लिए सभी हैंडलिंग को मूल कोड से छोड़ा जा सकता है। फ़ंक्शन प्रस्तावना में तर्कों की एक संक्षिप्त वैधता जांच होगी, यदि वह तर्क VM aborts को बाइटकोड पर वापस नहीं करता है और फिर से प्रोफाइलिंग शुरू करता है। यहाँ
4 साल बाद ... पोर्टेबिलिटी: देशी कोड उत्पन्न करने वाले कंपाइलर्स जीसी (आधिकारिक [गो] (http://golang.org/) कंपाइलर जैसे क्रॉस-कंपाइल कर सकते हैं) जो इसे सरल बनाता है। सुरक्षा: [मूल ग्राहक] (https://developers.google.com/native-client/) एक सैंडबॉक्स में मूल कोड चलाता है जिससे इसकी अनुमति सीमित हो जाती है। आकार: मोबाइल उपकरणों के लिए भी इन दिनों शायद ही कभी कोई समस्या है। –
@Zippoxer चार वर्षों के साथ क्या है? क्रॉस-संकलन एक बहुत पुरानी अवधारणा है। लेकिन आपको अभी भी प्रत्येक प्लेटफ़ॉर्म के लिए कोड को संकलित करना होगा। वर्चुअलाइजेशन भी एक नई अवधारणा नहीं है, लेकिन मूल निष्पादन के लिए लिखित वर्चुअलाइजिंग कोड वर्चुअलाइजिंग कोड जैसा नहीं है जिसे विशेष रूप से एक सैंडबॉक्स में चलाने के लिए डिज़ाइन किया गया है। आकार के लिए, मैं वास्तव में जावा बाइटकोड सीआईएससी को बिल्कुल नहीं बुलाऊंगा। सीआईएल के लिए भी यही है। – Malcolm