संक्षेप में : कचरा संग्रहकर्ता पुनरावृत्ति का उपयोग नहीं करते हैं। वे अनिवार्य रूप से दो सेट (जो गठबंधन कर सकते हैं) का ट्रैक रखकर ट्रेसिंग को नियंत्रित करते हैं। अनुरेखण और सेल प्रसंस्करण का क्रम अप्रासंगिक है, जो सेटों का प्रतिनिधित्व करने के लिए काफी कार्यान्वयन स्वतंत्रता देता है। इसलिए कई समाधान हैं जो वास्तव में स्मृति उपयोग में बहुत सस्ते हैं। यह आवश्यक है क्योंकि जीसी ठीक कहा जाता है जब ढेर स्मृति से बाहर चलाता है। बड़े आभासी यादों के साथ चीजें थोड़ी भिन्न होती हैं, क्योंकि नए पृष्ठों को आसानी से आवंटित किया जा सकता है, और दुश्मन को जगह की कमी नहीं है, लेकिन डेटा इलाके की कमी
है ।
मुझे लगता है कि आप कचरा संग्रहकर्ता का पता लगाने पर विचार कर रहे हैं , न कि संदर्भ गणना जिसके लिए आपका प्रश्न लागू नहीं होता है।
UV
ध्यान देने वाली पहली बात यह है कि सभी ट्रेसिंग जीसी एक ही अमूर्त मॉडल का पालन करते हैं, जो कि कार्यक्रम से सुलभ मेमोरी में कोशिकाओं के निर्देशित ग्राफ के अन्वेषण पर आधारित है, जहां मेमोरी सेल वर्टिस और पॉइंटर्स निर्देशित किनारे हैं। यह निम्नलिखित सेटों के लिए उपयोग करता है:
VUUT
UV
UcVUcUT
UUV=TVH−VV
VUUT
मैं इस बात का भी विवरण छोड़ देता हूं कि एक सेल क्या है, चाहे वे एक आकार में हों या कई, हम उनमें पॉइंटर्स कैसे ढूंढते हैं, उन्हें कैसे कॉम्पैक्ट किया जा सकता है, और अन्य तकनीकी मुद्दों के एक मेजबान जो आप कचरा संग्रह पर पुस्तकों और सर्वेक्षणों में पा सकते हैं ।
U
जहां ज्ञात कार्यान्वयन अलग-अलग हैं, जहां ये सेट वास्तव में प्रतिनिधित्व करते हैं। कई तकनीकों का वास्तव में उपयोग किया गया है:
बिट मैप: कुछ मेमोरी स्पेस एक मैप के लिए संरक्षित होता है, जिसमें प्रत्येक मेमोरी सेल के लिए एक बिट होता है, जिसे सेल के एड्रेस का उपयोग करके पाया जा सकता है। बिट तब होता है जब संबंधित सेल मानचित्र द्वारा परिभाषित सेट में होता है। यदि केवल बिट मैप्स का उपयोग किया जाता है, तो आपको प्रति सेल केवल 2 बिट्स की आवश्यकता है।
वैकल्पिक रूप से, आपके पास इसे चिह्नित करने के लिए प्रत्येक कक्ष में एक विशेष टैग बिट (या 2) के लिए स्थान हो सकता है।
log2pp
आप सेल की सामग्री और उसके संकेत पर एक विधेय का परीक्षण कर सकते हैं।
आप केवल सेट की गई सेल से संबंधित सभी कक्षों के लिए इच्छित मेमोरी के एक नि: शुल्क भाग में सेल को स्थानांतरित कर सकते हैं।
VTTU
आप वास्तव में इन तकनीकों को जोड़ सकते हैं, यहां तक कि एक सेट के लिए भी।
जैसा कि कहा गया है, उपरोक्त सभी का उपयोग कुछ कार्यान्वित कचरा कलेक्टर द्वारा किया गया है, कुछ के रूप में अजीब लग सकता है। यह सब कार्यान्वयन की विभिन्न बाधाओं पर निर्भर करता है। और वे स्मृति उपयोग में सस्ते हो सकते हैं, संभवतः प्रसंस्करण नीतियों द्वारा मदद की जा सकती है जो कि उस उद्देश्य के लिए स्वतंत्र रूप से चुनी जा सकती हैं, क्योंकि वे अंतिम परिणाम के लिए मायने नहीं रखते हैं।
एक नए क्षेत्र में कोशिकाओं को स्थानांतरित करने वाला सबसे अजीब लग सकता है, वास्तव में बहुत आम है: इसे प्रतिलिपि संग्रह कहा जाता है। इसका उपयोग ज्यादातर वर्चुअल मेमोरी के साथ किया जाता है।
स्पष्ट रूप से कोई पुनरावृत्ति नहीं है, और उत्परिवर्ती एल्गोरिथ्म स्टैक का उपयोग करने की आवश्यकता नहीं है।
एक और महत्वपूर्ण बिंदु यह है कि बड़ी आभासी यादों के लिए कई आधुनिक जीसी लागू किए जाते हैं । फिर लागू करने के लिए जगह और अतिरिक्त सूची या स्टैक एक मुद्दा नहीं है क्योंकि नए पृष्ठों को आसानी से आवंटित किया जा सकता है। हालांकि, बड़ी आभासी यादों में, शत्रु स्थान की कमी नहीं है , बल्कि स्थानीयता की कमी है । फिर, सेट का प्रतिनिधित्व करने वाली संरचना, और उनका उपयोग, डेटा संरचना और जीसी निष्पादन की स्थानीयता को संरक्षित करने की दिशा में सक्षम होना चाहिए । समस्या अंतरिक्ष नहीं बल्कि समय है। अपर्याप्त कार्यान्वयन मेमोरी ओवरफ़्लो की तुलना में अस्वीकार्य मंदी दिखाने की अधिक संभावना है।
मैंने इन तकनीकों के विभिन्न संयोजनों के परिणामस्वरूप कई विशिष्ट एल्गोरिदम का संदर्भ नहीं दिया, क्योंकि यह काफी लंबा लगता है।