कचरा संग्राहक सॉफ्टवेयर का एक टुकड़ा है जो स्वचालित मेमोरी प्रबंधन करता है। इसका काम किसी भी अप्रयुक्त मेमोरी को मुक्त करना है और यह सुनिश्चित करना है कि उपयोग में रहते हुए कोई भी मेमोरी मुक्त न हो। कुछ भाषाओं जैसे कि जावा और .NET भाषाओं में स्वचालित कचरा संग्रह की सुविधा होती है, जबकि अन्य जैसे कि C/C++ में मेमोरी को मैन्युअल रूप से प्रबंधित करने के लिए प्रोग्रामर की आवश्यकता होती है।
लिस्प भाषा के साथ काम करते समय मैनुअल मेमोरी प्रबंधन को आसान बनाने के लिए कचरा संग्रह सबसे पहले लिस्प निर्माता जॉन मैककार्थी द्वारा पेश किया गया था।
स्वचालित मेमोरी प्रबंधन करने के लिए कचरा संग्राहक द्वारा उपयोग की जाने वाली तीन मुख्य तकनीकें इस प्रकार हैं:
- रेफरेंस काउंटिंग - प्रत्येक ऑब्जेक्ट के संदर्भ को एक काउंटर वेरिएबल का उपयोग करके गिना जाता है। जब काउंटर शून्य पर पहुंचता है, तो यह दर्शाता है कि वस्तु की अब आवश्यकता नहीं है और इस प्रकार पुनर्नवीनीकरण किया जाता है।
- मार्क और स्वीप - सभी डेटा क्षेत्रों पर सभी पहुंच योग्य वस्तुओं का एक पुनरावर्ती ट्रैवर्सल किया जाता है, और पहुंच योग्य वस्तुओं को चिह्नित किया जाता है। अचिह्नित वस्तुओं को तब पुनर्नवीनीकरण किया जाता है।
- रोकें और कॉपी करें - मेमोरी हीप को दो खंडों में विभाजित किया गया है: एक खंड जिसमें ऑब्जेक्ट होते हैं और एक खाली सेक्शन जहां ऑब्जेक्ट्स को स्थानांतरित (कॉपी) किया जाता है, अगर चिह्नित किया जाता है। पहले खंड में अचिह्नित वस्तुओं को खाली करके पुनर्नवीनीकरण किया जाता है।
जब किसी पॉइंटर/ऑब्जेक्ट को आवंटित मेमोरी का एक ब्लॉक मुक्त कर दिया गया है, तो पॉइंटर/ऑब्जेक्ट को शून्य मान पर रीसेट किया जाना चाहिए; अन्यथा, यह लटक रहा है, यानी, एक अमान्य मेमोरी ब्लॉक को इंगित कर रहा है।
कचरा संग्रह बग और सुरक्षा जोखिमों को कम करने में मदद करता है जो लटकने वाले पॉइंटर्स और मेमोरी लीक की समस्याओं के कारण होता है।
कचरा संग्राहक का उपयोग करने के नुकसान में संसाधनों और प्रदर्शन पर अतिरिक्त खर्च शामिल है। गारबेज संग्राहक चलाने से भी सिस्टम धीमा हो सकता है और इस प्रकार इसके प्रदर्शन में कमी आ सकती है।
0 Comments