CodeGym/Java Course/मॉड्यूल 3/जावा में कचरा संग्रह

जावा में कचरा संग्रह

उपलब्ध

याद करें कि जावा में कचरा संग्रह क्या है

कचरा संग्रह अप्रयुक्त वस्तुओं को नष्ट करके पूर्ण रनटाइम मेमोरी को पुनः प्राप्त करने की प्रक्रिया है।

कभी-कभी प्रोग्रामर बेकार वस्तुओं को नष्ट करना भूल सकता है, और उन्हें आवंटित स्मृति मुक्त नहीं होती है। अधिक से अधिक सिस्टम मेमोरी का उपभोग किया जाता है, और अंततः अधिक आवंटित नहीं किया जाता है। ऐसे एप्लिकेशन "मेमोरी लीक" से ग्रस्त हैं।

एक निश्चित बिंदु के बाद, नई वस्तुओं को बनाने के लिए पर्याप्त मेमोरी नहीं रह जाती है और OutOfMemoryError के कारण प्रोग्राम असामान्य रूप से समाप्त हो जाता है ।

जावा में कचरा संग्रह वह प्रक्रिया है जिसके द्वारा जावा प्रोग्राम मेमोरी को स्वचालित रूप से प्रबंधित करते हैं। जावा प्रोग्राम को जावा वर्चुअल मशीन (जेवीएम) पर चलने वाले बायटेकोड में संकलित किया जाता है।

जब जावा प्रोग्राम जेवीएम पर चलते हैं, तो ढेर पर ऑब्जेक्ट बनाए जाते हैं, जो उन्हें आवंटित मेमोरी का हिस्सा होता है।

जब जावा एप्लिकेशन चल रहा होता है, तो उसमें नए ऑब्जेक्ट बनाए जाते हैं। अंत में, कुछ वस्तुओं की अब आवश्यकता नहीं है। हम कह सकते हैं कि किसी भी समय हीप मेमोरी में दो प्रकार के ऑब्जेक्ट होते हैं।

  • लाइव - इन वस्तुओं का उपयोग किया जाता है, इन्हें कहीं और से संदर्भित किया जाता है।
  • मृत - इन वस्तुओं का कहीं और उपयोग नहीं किया जाता है, इनका कोई संदर्भ नहीं है।

कचरा संग्राहक इन अप्रयुक्त वस्तुओं को ढूंढता है और उन्हें मेमोरी खाली करने के लिए हटा देता है।

जावा में कचरा संग्रह एक स्वचालित प्रक्रिया है । प्रोग्रामर को हटाए जाने वाले ऑब्जेक्ट को स्पष्ट रूप से चिह्नित करने की आवश्यकता नहीं है।

प्रत्येक जेवीएम कचरा संग्रह के अपने स्वयं के संस्करण को लागू कर सकता है। हालांकि, संग्राहक को पहुंच योग्य वस्तुओं को चिह्नित करने या पहचानने और संघनन के माध्यम से उन्हें नष्ट करने के लिए हीप मेमोरी में मौजूद वस्तुओं से निपटने के लिए मानक जेवीएम विनिर्देश के अनुरूप होना चाहिए।

ऑब्जेक्ट रीचैबिलिटी

किसी वस्तु को जीवित के रूप में पहचानने के लिए, लिंक की उपस्थिति पर्याप्त नहीं है। ऐसा इसलिए है क्योंकि कुछ मृत वस्तुएँ अन्य मृत वस्तुओं को संदर्भित कर सकती हैं। इसलिए यह आवश्यक है कि किसी वस्तु के सभी संदर्भों में से कम से कम एक "लाइव" वस्तु से होना चाहिए।

ऑब्जेक्ट रीचैबिलिटी

कचरा संग्राहक जीवित और मृत वस्तुओं के बीच अंतर करने के लिए जीसी रूट्स ( कचरा संग्रह जड़ों ) की अवधारणा के साथ काम करते हैं । 100% जीवित वस्तुएं हैं और उनमें से ऐसे लिंक हैं जो अन्य वस्तुओं को चेतन करते हैं और इसी तरह।

ऐसी जड़ों के उदाहरण:

  • क्लास जो सिस्टम क्लास लोडर द्वारा लोड की जाती हैं।
  • लाइव स्ट्रीम।
  • वर्तमान में निष्पादित विधियों और स्थानीय चर के पैरामीटर।
  • तुल्यकालन के लिए एक मॉनिटर के रूप में उपयोग की जाने वाली वस्तुएं।
  • वे वस्तुएँ जो किसी उद्देश्य के लिए कचरा संग्रह से रखी जाती हैं।
  • कचरा संग्राहक स्मृति में वस्तुओं के पूरे ग्राफ के माध्यम से चलता है, इन जड़ों से शुरू होता है और अन्य वस्तुओं के संदर्भों का पालन करता है।

जावा में कचरा संग्रह कदम

मानक कचरा संग्रह कार्यान्वयन के तीन चरण हैं।

1. वस्तुओं को लाइव के रूप में चिह्नित करें

इस बिंदु पर, कचरा संग्राहक (जीसी) को ऑब्जेक्ट ग्राफ़ को ट्रेस करके स्मृति में सभी जीवित वस्तुओं की पहचान करनी चाहिए।

जब यह किसी वस्तु पर जाता है, तो यह इसे उपलब्ध और इसलिए जीवित के रूप में चिह्नित करता है। वे सभी वस्तुएँ जो GC जड़ों से पहुँच योग्य नहीं हैं, उन्हें कचरा संग्रह के लिए उम्मीदवार माना जाता है।

2. मृत वस्तुओं को साफ करना

मार्कअप चरण के बाद, मेमोरी स्पेस या तो जीवित (देखी गई) या मृत (विज़िट नहीं की गई) वस्तुओं द्वारा कब्जा कर लिया जाता है। सफाई चरण उन स्मृति अंशों को मुक्त करता है जिनमें ये मृत वस्तुएँ होती हैं।

3. स्मृति में शेष वस्तुओं की संक्षिप्त व्यवस्था

पिछले चरण में हटाई गई मृत वस्तुओं के लिए यह आवश्यक नहीं है कि वे एक दूसरे के बगल में हों। इस प्रकार, आप एक खंडित (आधा-खाली) मेमोरी स्पेस प्राप्त करने का जोखिम उठाते हैं।

लेकिन, निश्चित रूप से, इसके लिए प्रदान करने से, उस समय मेमोरी को कॉम्पैक्ट करना संभव है जब कचरा कलेक्टर मृत वस्तुओं को हटा देता है। बाकी ढेर की शुरुआत में एक सन्निहित ब्लॉक में स्थित होंगे।

संघनन प्रक्रिया नई वस्तुओं के लिए क्रमिक रूप से मेमोरी आवंटित करना आसान बनाती है।

टिप्पणियां
  • लोकप्रिय
  • नया
  • पुराना
टिप्पणी लिखने के लिए आपको साइन इन करना होगा
इस पेज पर अभी तक कोई टिप्पणियां नहीं हैं