2009-07-04 14 views
6

द्वारा मूल कोड निष्पादन JVM/CLR निष्पादित करता है जेआईटी मूल कोड संकलित करता है? क्या यह कुछ कोड इंजेक्शन द्वारा या निष्पादन योग्य मेमोरी में कोड कॉपी करके है? सिस्टम कॉल क्या हैं जो गतिशील कोड निष्पादन की अनुमति देता है?जेवीएम/सीएलआर

उत्तर

2

मुझे विशेष रूप से पता नहीं है कि जावा कैसे करता है, लेकिन आम तौर पर आप दुभाषिया की निर्देश धारा में "जाल" opcodes डालेंगे। दो ऑपोड्स in the JVM spec हैं जो इस उद्देश्य के लिए तैयार किए गए हैं। http://download.java.net/jdk6/source/

2

साझा भाषा क्रम मूल कोड या एक देशी ठूंठ की ओर इशारा करते JIT कोड में कामयाब रहे और करने के लिए प्रविष्टियों के साथ प्रत्येक प्रकार के लिए एक methodtable है:

आप निश्चित रूप से जानना चाहते हैं, तो स्रोत के अलावा कोई बेहतर जवाब फिर पॉइंटर के साथ विधिबद्ध फिक्स्ड को सिर्फ बनाए गए मूल कोड में फिक्सअप करें।

MSDN MethodDesc अनुभाग

This blog entry by Dave Notario बताते हैं कि कैसे CLR JIT कम्पाइलर काम करता है में गहराई explanation में एक अधिक है।

3

मैं समझा सकता हूं कि हम इसे CACAO VM (एक शोध जेआईटी-केवल जेवीएम) में कैसे करते हैं। सबसे पहले, एक विधि के लिए मशीन कोड कुछ ढेर-आवंटित स्मृति ब्लॉक में उत्पन्न होता है। संकलन के बाद, अंतिम कोड लंबाई ज्ञात है, और निष्पादन योग्य स्मृति का एक हिस्सा mmap और PROT_EXEC ध्वज (प्रासंगिक CACAO कोड here) का उपयोग करके आवंटित किया जाता है। फिर, मशीन कोड को एमएमएड क्षेत्र में कॉपी किया गया है। इसके बाद, कई आर्किटेक्चरों को कुछ मशीन-विशिष्ट कैश फ्लशिंग तंत्र की आवश्यकता होती है। उदाहरण के तौर पर, PowerPC 64 के लिए cache-flushing function पर एक नज़र डालें। विशेष रूप से, i386 और x86_64 पर, ऐसा करने के लिए कुछ भी नहीं है। इस चरण के बाद, प्रोसेसर नव-जेनरेट किए गए कोड को निष्पादित करने के लिए तैयार है। वैकल्पिक रूप से, पहले ही आवंटित स्मृति पृष्ठों को mprotect के साथ निष्पादन योग्य चिह्नित किया जा सकता है। ध्यान दें कि mmap/mprotect यूनिक्स सुविधाएं हैं।

+0

डीईपी को ध्यान में रखते हुए और डेटा और निष्पादन योग्य कोड के स्पष्ट पृथक्करण और निष्पादन योग्य मेमोरी को नहीं लिखा जा सकता है और डेटा मेमोरी को कूद/निष्पादित नहीं किया जा सकता है, मुझे अभी भी दिलचस्पी होगी कि सीएलआर/जेआईटी के साथ Win32 सिस्टम पर यह कैसे किया जाता है । – Abel

+1

@Abel आप [यह] (http://blogs.msdn.com/b/vcblog/archive/2009/05/21/dynamicbase-and-nxcompat.aspx) आलेख दिलचस्प पा सकते हैं। – ghord