CodeGym/Java Course/मॉड्यूल 3/जावा मध्ये कचरा गोळा करणे

जावा मध्ये कचरा गोळा करणे

उपलब्ध

जावा मध्ये कचरा गोळा करणे काय आहे ते आठवा

कचरा संकलन ही न वापरलेल्या वस्तू नष्ट करून पूर्ण रनटाइम मेमरी पुन्हा मिळवण्याची प्रक्रिया आहे.

कधीकधी प्रोग्रामर निरुपयोगी वस्तू नष्ट करणे विसरू शकतो आणि त्यांना वाटप केलेली मेमरी मुक्त केली जात नाही. अधिकाधिक सिस्टीम मेमरी वापरली जाते, आणि अखेरीस अधिक वाटप केले जात नाही. अशा अनुप्रयोगांना "मेमरी लीक" चा त्रास होतो.

ठराविक बिंदूनंतर, नवीन ऑब्जेक्ट्स तयार करण्यासाठी पुरेशी मेमरी नाही आणि OutOfMemoryError मुळे प्रोग्राम असामान्यपणे संपुष्टात येतो .

Java मधील कचरा संकलन ही प्रक्रिया आहे ज्याद्वारे Java प्रोग्राम मेमरी स्वयंचलितपणे व्यवस्थापित करतात. जावा प्रोग्राम्स बायकोडमध्ये संकलित केले जातात जे Java व्हर्च्युअल मशीन (JVM) वर चालतात.

जेव्हा Java प्रोग्राम्स JVM वर चालतात, तेव्हा ऑब्जेक्ट्स हीपवर तयार होतात, जो त्यांना वाटप केलेल्या मेमरीचा भाग असतो.

Java अॅप्लिकेशन चालू असताना, त्यात नवीन ऑब्जेक्ट्स तयार होतात. सरतेशेवटी, काही वस्तूंची यापुढे गरज नाही. आपण असे म्हणू शकतो की कोणत्याही वेळी, हीप मेमरीमध्ये दोन प्रकारच्या वस्तू असतात.

  • थेट - या वस्तू वापरल्या जातात, त्यांचा संदर्भ इतर कुठून तरी असतो.
  • मृत - या वस्तू इतर कोठेही वापरल्या जात नाहीत, त्यांचे कोणतेही संदर्भ नाहीत.

कचरा गोळा करणाऱ्याला या न वापरलेल्या वस्तू सापडतात आणि मेमरी मोकळी करण्यासाठी त्या काढून टाकतात.

जावामध्ये कचरा गोळा करणे ही एक स्वयंचलित प्रक्रिया आहे . प्रोग्रामरला हटवल्या जाणार्‍या ऑब्जेक्ट्सवर स्पष्टपणे चिन्हांकित करण्याची आवश्यकता नाही.

प्रत्येक JVM कचरा संकलनाची स्वतःची आवृत्ती लागू करू शकते. तथापि, कलेक्टरने हीप मेमरीमध्ये असलेल्या वस्तूंशी व्यवहार करण्यासाठी जेव्हीएम स्पेसिफिकेशनचे पालन करणे आवश्यक आहे जेणेकरून पोहोचू न शकणार्‍या वस्तू चिन्हांकित किंवा ओळखल्या जातील आणि त्यांना कॉम्पॅक्शनद्वारे नष्ट करा.

ऑब्जेक्ट पोहोचण्याची क्षमता

एखादी वस्तू जिवंत म्हणून ओळखण्यासाठी, लिंक्सची उपस्थिती पुरेशी नाही. कारण काही मृत वस्तू इतर मृत वस्तूंचा संदर्भ घेऊ शकतात. म्हणूनच हे आवश्यक आहे की ऑब्जेक्टच्या सर्व संदर्भांमध्ये, "लाइव्ह" ऑब्जेक्टमधून किमान एक असावा.

ऑब्जेक्ट पोहोचण्याची क्षमता

कचरा संकलक जिवंत आणि मृत वस्तूंमध्ये फरक करण्यासाठी GC रूट्स ( कचरा संकलन रूट्स ) संकल्पनेसह कार्य करतात . 100% जिवंत वस्तू आहेत आणि त्यांच्यापासून दुवे आहेत जे इतर वस्तूंना सजीव करतात.

अशा मुळांची उदाहरणे:

  • सिस्टम क्लास लोडरद्वारे लोड केलेले वर्ग.
  • थेट प्रवाह.
  • सध्या कार्यान्वित करण्याच्या पद्धती आणि स्थानिक चलांचे पॅरामीटर्स.
  • सिंक्रोनाइझेशनसाठी मॉनिटर म्हणून वापरले जाणारे ऑब्जेक्ट.
  • कचरा संकलनातून काही कारणासाठी राखून ठेवलेल्या वस्तू.
  • कचरा गोळा करणारा मेमरीमधील वस्तूंच्या संपूर्ण आलेखातून या मुळांपासून सुरू होऊन आणि इतर वस्तूंचे संदर्भ घेतो.

जावा मध्ये कचरा गोळा करण्याचे टप्पे

मानक कचरा संकलन अंमलबजावणीचे तीन टप्पे आहेत.

1. वस्तू थेट म्हणून चिन्हांकित करा

या टप्प्यावर, कचरा संग्राहक (GC) ने ऑब्जेक्ट आलेख वळवून मेमरीमधील सर्व जिवंत वस्तू ओळखल्या पाहिजेत.

जेव्हा ते एखाद्या वस्तूला भेट देते तेव्हा ते उपलब्ध म्हणून चिन्हांकित करते आणि म्हणूनच जिवंत आहे. GC रूट्समधून प्रवेश करण्यायोग्य नसलेल्या सर्व वस्तूंना कचरा संकलनासाठी उमेदवार मानले जाते.

2. मृत वस्तू साफ करणे

मार्कअप टप्प्यानंतर, मेमरी स्पेस जिवंत (भेट दिलेल्या) किंवा मृत (भेट न दिलेल्या) वस्तूंनी व्यापलेली असते. क्लीनअप टप्पा या मृत वस्तू असलेल्या मेमरी तुकड्यांना मुक्त करते.

3. मेमरीमधील उर्वरित वस्तूंची संक्षिप्त व्यवस्था

मागील टप्प्यात काढलेल्या मृत वस्तू एकमेकांच्या शेजारी असणे आवश्यक नाही. अशा प्रकारे, तुम्हाला खंडित (अर्ध-रिक्त) मेमरी जागा मिळण्याचा धोका आहे.

परंतु, अर्थातच, यासाठी प्रदान केल्यामुळे, कचरा गोळा करणारा मृत वस्तू काढून टाकतो तेव्हा त्या क्षणी मेमरी कॉम्पॅक्ट करणे शक्य आहे. उर्वरित ढीगांच्या सुरूवातीस एका संलग्न ब्लॉकमध्ये स्थित असेल.

कॉम्पॅक्शन प्रक्रिया नवीन वस्तूंसाठी अनुक्रमे मेमरी वाटप करणे सोपे करते.

टिप्पण्या
  • लोकप्रिय
  • नवीन
  • जुने
टिप्पणी करण्यासाठी तुम्ही साईन इन केलेले असणे आवश्यक आहे
या पानावर अजून कोणत्याही टिप्पण्या नाहीत