मैंने हाल ही में कचरा संग्रह (ज्यादातर जावा में) के बारे में बिट्स और टुकड़े पढ़े हैं और एक प्रश्न अभी भी अनुत्तरित नहीं है: एक जेवीएम (या सामान्य रूप से रनटाइम सिस्टम) वर्तमान में जीवित वस्तुओं का ट्रैक कैसे रखता है?कचरा संग्रह - रूट नोड्स
मैं समझता हूं कि ऑब्जेक्ट्स वे हैं जो वर्तमान में स्टैक पर हैं, इसलिए सभी स्थानीय चर या फ़ंक्शन पैरामीटर, जो ऑब्जेक्ट हैं। इस दृष्टिकोण के साथ लूट यह है कि जब भी रनटाइम सिस्टम स्टैक पर वर्तमान में क्या जांचता है, तो संदर्भ संदर्भ और सरल int के बीच यह अंतर कैसे होगा? यह नहीं कर सकता, है ना?
इसलिए, तंत्र को लाइव वस्तुओं की प्रारंभिक सूची बनाने के लिए क्रम निशान स्वीप चरण के लिए पारित करने के लिए अनुमति देने के लिए किसी प्रकार का होना चाहिए ...
तो सभी में यह JVM की बजाय बहुत कम स्तर भिन्नता है? लेकिन जेवीएम में बाइटकोड के लिए एक संदर्भ प्रकार घोषित किया गया है, तो इसका उपयोग क्यों न करें? आप सुनिश्चित हैं कि बाइट कोड स्तर के बजाय यह इतना कम स्तर है? – Bober02
जैसा कि मुझे पता है (दोनों लिंक जो मैंने पहले दिया था, और कई जेवीएम कार्यान्वयन के कोड की ब्राउज़िंग के आधार पर), मुझे यकीन है कि मेरी समझ सही है। आप इसे देखने के लिए बस कुछ ओपन सोर्स जेवीएम कार्यान्वयन के जीसी कोड में डाइविंग कर सकते हैं। संदर्भ को जानने के लिए उन्हें सभी को ढेर चलने की जरूरत है। हालांकि, हो सकता है कि मानदंड यह सत्यापित करने के लिए प्रयोग किया जाता है कि स्लॉट संदर्भ है या नहीं, थोड़ा अंतर है (उनमें से अधिकतर ए और बी को सत्यापित करते हैं। सी के लिए, यह वास्तव में कार्यान्वयन पर आधारित है)। – Rainfield
बाइटकोड का उपयोग क्यों नहीं करते, यह मेरी समझ है (सुनिश्चित नहीं है कि यह सही है या नहीं)। जीसी एक रनटाइम चीज है, लेकिन बाइटकोड संकलन समय और स्थैतिक पर उत्पन्न होते हैं। जब कोई जीसी होता है, तो रनटाइम सिस्टम को जड़ों को खोजने और जीवित वस्तुओं को खोजने के लिए उनका पालन करने की आवश्यकता होती है। । ऐसा करने के लिए, आपको वास्तव में प्रत्येक स्टैक फ्रेम स्लॉट में मान की जांच करनी होगी, यहां तक कि आप जानते हैं कि इस स्लॉट में संकलन समय पर एक संदर्भ है (जैसा कि ग्रेफायर ने कहा था, आप इसे बाइटकोड देखकर जानते हैं)। क्योंकि आपको ढेर में अन्य वस्तुओं को खोजने के लिए सटीक संदर्भ मान जानने की आवश्यकता है। – Rainfield