5

जैक्स आरवीएम, एक मेटासिर्क्यूलर जावा रनटाइम, जावा (एमएमटीके) में लिखा गया ऑलोकेटर/कलेक्टर है।एक प्रबंधित भाषा में एक मेमोरी प्रबंधक लिख रहा है?

यह कैसे काम करता है, फिर, जब आपके कचरा कलेक्टर को कचरा कलेक्टर चलाने की आवश्यकता होती है? कोड को देखने से, मैंने एमएमटीके को जावा के किसी भी विशेष सबसेट में सीमित नहीं देखा, लेकिन ऐसा लगता है कि यदि आपका कोड प्रबंधित स्मृति आवंटित करने के लिए है, तो उसे चलाने के लिए प्रबंधित मेमोरी आवंटित करने की आवश्यकता है, यह एक में जा रहा है जब तक यह उड़ाता है तब तक रिकर्सिव स्पिन।

लेकिन स्पष्ट रूप से एमएमटीके काम करता है, और स्पष्ट रूप से कुछ अन्य परियोजनाएं इसका भी उपयोग कर रही हैं। जावा जैसी एक प्रबंधित भाषा में स्मृति आवंटक और जीसी लिखना कैसे संभव है?

+0

असली उत्तर स्रोत कोड में है ... इसलिए जैक्स के स्रोत कोड को प्राप्त करें और इसके अंदर खोजें। –

+3

मैंने यह किया है। हालांकि यह एक बड़ी परियोजना है, और मुझे कोई विशिष्ट खुलासे नहीं मिला। यह "जेवीएम कैसे काम करता है" के जवाब में है "हॉटस्पॉट रिपोजिटरी डाउनलोड करें और grepping शुरू करें!" –

+0

मैंने एमएमटीके के बारे में एक बात सुनी है, और मूल रूप से यह एक प्रोग्राम जनरेटर है। आप अपने कागजात भी पढ़ सकते हैं और लेखकों से पूछ सकते हैं ... –

उत्तर

1

ऐसा करने के कुछ उदाहरण हैं। मैं जैक्स के कार्यान्वयन से परिचित नहीं हूं, लेकिन मैंने जावा-आधारित डिज़ाइन और पीपीपी दोनों पर पढ़ा था। उनमें से ज्यादातर चीजों में आम बात है, चीजों को दो स्तरों में अलग करना: रनटाइम/दुभाषिया स्तर और आवेदन स्तर। प्रत्येक स्तर की अपनी वस्तुएं, अपवाद, निष्पादन प्रवाह, आदि

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

एप्लिकेशन लेयर उन ऑपकोड्स में निहित है। एप्लिकेशन लेयर एक और समग्र फ़ंक्शन का प्रतिनिधित्व करता है जो इनपुट में लेता है, इसे संसाधित करता है और आउटपुट करता है। इन चरणों में उनमें एक मेमोरी प्रबंधन दिनचर्या भी हो सकती है। रनटाइम परवाह नहीं है कि ऑपकोड इतने लंबे समय तक क्या कर रहे हैं जब वे वैध हैं और यह उन्हें निष्पादित करता है। सिद्धांत रूप में, आप एक जीसी भाषा लिख ​​सकते हैं जिसमें एक जीसी भाषा है जिसमें एक जीसी भाषा शामिल है ... और तब तक जब तक आप ENIAC गति को हिट नहीं करते। ;)

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

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

इस तरह की परियोजनाओं के बारे में बात यह है कि प्रत्येक एक अलग है। लक्ष्य और कार्यान्वयन भाषाओं की प्रकृति डिजाइन विकल्पों को बहुत निर्देशित करती है। समस्या को हल करने के तरीके के साथ रचनात्मक होने के लिए आपको कई अवसर मिलते हैं।

0

आप कौन सा जवाब चाहते हैं:
- "यह सिर्फ बूटस्ट्रैप प्रक्रिया है, बड़ा सौदा क्या है?"
या
- "यह जादू है! (यही कहना है कि एक तकनीक वर्तमान में समझने की तुलना में अधिक उन्नत है।) "

पहले सी compilers में लिखे गए थे, इस मिलता है, सी। कैसे पहला ऑपरेटिंग सिस्टम लिखा गया था? एक है जो एक दोपहर labouriously बिताया है बनाने के लिए एक कागज टेप bootstrap एक tedious- टॉगल स्विच और कंसोल रोशनी (18-बिट डीईसी पीडीपी -15 पर) का उपयोग करके बिट-बाद-बाद में, इनमें से कोई भी अब एक रहस्य नहीं है। कोई भी सबसे उन्नत टुकड़ों से शुरू होता है जिनका पुन: उपयोग किया जा सकता है, और उपकरण बना सकते हैं जटिलता बढ़ने तक टूल किट एप्लिकेशन बनाने के लिए पर्याप्त है।

+2

मैं प्रश्न के लिए विशिष्ट विवरण की तलाश में हूं। मुझे पता है कि एक स्व होस्टिंग कंपाइलर कैसे लिखना है, और मैं बूटस्ट्रैपिंग की प्रक्रिया से परिचित हूं। हालांकि, मुझे नहीं पता कि बूटस्ट्रैपिंग कैसे काम करती है जब कचरा कलेक्टर की तरह रन-टाइम निर्भरता होती है, जो एक कंपाइलर की तरह संकलन-समय निर्भरता से काफी अलग है। –

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