दिलचस्प पोस्ट
कैसे दृश्य स्टूडियो में एक धागे डिबग करने के लिए? कैसे JQuery-AJAX अनुरोध तुल्यकालिक बनाने के लिए पायथन में सापेक्ष पथ एंड्रॉइड: सभी गतिविधियों पर नेविगेशन ड्रॉवर XCode इंटरफ़ेस बिल्डर में अजीब रंग? आर में एलएम () का उपयोग करते हुए एक बहुपद प्रतिगमन के भविष्यवाणियों को साजिश करते हुए गड़बड़ साजिश अजगर: एन-लगभग-बराबर-लम्बी विभाजनों में एक सूची का टुकड़ा करना कमांड लाइन से सी प्रोग्राम में तर्क दें क्या jsFiddle में एक डाउनलोड समारोह है? सख्त मोड में किसी अज्ञात वातावरण में वैश्विक ऑब्जेक्ट का संदर्भ प्राप्त करना मोबाइल पर jQuery के लाइव स्क्रॉल ईवेंट (आसपास काम करें) </ Body> टैग के बाद <script> टैग को स्थान देना गलत है? इकाई फ़्रेमवर्क 3 टेबल्स में शामिल हों विंडोज में पायथन से एक्सेल ड्राइव करना शास्त्रीय बनाम प्रोटोटाइप विरासत

जावा में कचरा कलेक्टर क्या है?

मैं जावा में नया हूँ और जावा में कचरा कलेक्टर के बारे में भ्रमित हूं। यह वास्तव में क्या करता है और यह कब कार्रवाई में आता है कृपया जावा में कचरा कलेक्टर के कुछ गुणों का वर्णन करें।

Solutions Collecting From Web of "जावा में कचरा कलेक्टर क्या है?"

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

जब एक ठेठ जावा अनुप्रयोग चल रहा है, तो यह नई ऑब्जेक्ट बना रहा है, जैसे String एस और File , लेकिन निश्चित समय के बाद, उन वस्तुओं का अब और उपयोग नहीं किया जाता है उदाहरण के लिए, निम्नलिखित कोड पर एक नज़र डालें:

 for (File f : files) { String s = f.getName(); } 

उपरोक्त कोड में, String s for लूप के प्रत्येक चलन पर बनाया जा रहा है। इसका अर्थ है कि हर आवृत्ति में, एक String ऑब्जेक्ट बनाने के लिए थोड़ा सा स्मृति आवंटित की जा रही है।

वापस कोड पर जा रहे हैं, हम देख सकते हैं कि एक बार फिर चलना चलाना एक बार फिर चलने में होता है, जो String ऑब्जेक्ट को पिछले पुनरावृत्त में बनाया गया था अब और प्रयोग नहीं किया जा रहा है – यह वस्तु अब "कचरा" माना जाता है

आखिरकार, हम बहुत कचरा प्राप्त करना शुरू कर देंगे, और उन वस्तुओं के लिए स्मृति का उपयोग किया जाएगा जो अब और नहीं उपयोग किए जा रहे हैं। यदि यह चालू रहता है, तो अंततः जावा वर्चुअल मशीन नई ऑब्जेक्ट बनाने के लिए अंतरिक्ष से बाहर हो जाएगा।

यही वह जगह है जहां कचरा कलेक्टर इनका कदम उठाता है

कचरा कलेक्टर ऐसी वस्तुओं की खोज करेगा जो अब और नहीं उपयोग किए जा रहे हैं, और स्मृति को मुक्त करने के लिए उनमें से छुटकारा पाता है, ताकि अन्य नई वस्तुओं स्मृति के उस टुकड़े का उपयोग कर सकें।

जावा में, मेमोरी प्रबंधन का कचरा कलेक्टर द्वारा ध्यान रखा जाता है, लेकिन सी जैसे अन्य भाषाओं में, एक को malloc और free जैसे फ़ंक्शंस का उपयोग करके खुद को स्मृति प्रबंधन करने की आवश्यकता होती है। मेमोरी प्रबंधन उन चीजों में से एक है, जो गलतियों को आसान बनाते हैं, जिससे स्मृति लीक कहा जा सकता है – उन स्थानों पर जहां स्मृति का उपयोग नहीं किया जाता है जब वे उपयोग नहीं करते हैं।

कचरा संग्रह जैसी स्वचालित स्मृति प्रबंधन योजनाएं ऐसा बनाती हैं ताकि प्रोग्रामर को स्मृति प्रबंधन के मुद्दों के बारे में बहुत कुछ चिंता न करें, इसलिए वह उन अनुप्रयोगों के विकास पर अधिक ध्यान केंद्रित कर सकें जिन्हें उन्हें विकसित करने की आवश्यकता है।

यह ऐसे ऑब्जेक्ट को आवंटित स्मृति को मुक्त करता है जो किसी भी प्रोग्राम द्वारा उपयोग नहीं किए जा रहे हैं – इसलिए इसका नाम "कचरा" है। उदाहरण के लिए:

 public static Object otherMethod(Object obj) { return new Object(); } public static void main(String[] args) { Object myObj = new Object(); myObj = otherMethod(myObj); // ... more code ... } 

मुझे पता है कि यह बेहद otherMethod() , लेकिन यहां आप किसी अन्य तरीके को कॉल करने के बाद otherMethod() बनाया गया मूल Object अप्राप्य बना है – और यह "कचरा" है जो कचरा एकत्रित हो जाता है।

जावा में जीसी स्वचालित रूप से चलाता है, लेकिन आप इसे System.gc() साथ स्पष्ट रूप से कॉल कर सकते हैं और एक प्रमुख कचरा संग्रह को लागू करने की कोशिश कर सकते हैं । जैसा पास्कल थिवेंट बताते हैं, आपको वास्तव में ऐसा करना नहीं चाहिए और यह अच्छे से अधिक नुकसान हो सकता है ( यह प्रश्न देखें)।

अधिक के लिए, कचरा संग्रह और ट्यूनिंग कूड़ा संग्रह (ओरेकल से) पर विकिपीडिया प्रविष्टि देखें

एक वस्तु कचरा संग्रहण या जीसी के लिए योग्य हो जाता है यदि यह किसी भी लाइव धागे से या किसी भी स्थिर संदर्भों तक पहुंच नहीं है।

दूसरे शब्दों में, आप कह सकते हैं कि एक ऑब्जेक्ट कचरा संग्रह के लिए पात्र हो जाता है, यदि इसके सभी संदर्भ शून्य हैं। चक्रीय निर्भरता को संदर्भ के रूप में गिना नहीं जाता है, यदि ऑब्जेक्ट ए के ऑब्जेक्ट बी के संदर्भ हैं और ऑब्जेक्ट बी ऑब्जेक्ट ए के संदर्भ में है और उनके पास कोई अन्य लाइव संदर्भ नहीं है तो ऑब्जेक्ट ए और बी दोनों कूड़ा संग्रह के लिए पात्र होंगे।


कूड़ा संग्रह के लिए गर्मी पीढ़ियों –

जावा ऑब्जेक्ट्स Heap में निर्मित होते हैं और Heap को जावा में कचरा संग्रह के लिए तीन भागों या पीढ़ियों में विभाजित किया जाता है, इन्हें यंग (न्यू) पीढ़ी, टेनराइड (ओल्ड) जनरेशन और मैप के पर्म क्षेत्र के रूप में कहा जाता है।

जावा हीप स्पेस नई पीढ़ी को तीन भागों में बांटा गया है जिसे ईडन अंतरिक्ष, उत्तरजीवी 1 और उत्तरजीवी 2 अंतरिक्ष कहा जाता है। जब कोई ऑब्जेक्ट पहले ढेर में बनाया होता है तो इसकी नई पीढ़ी में एडेन स्पेस के अंदर बनाई जाती है और बाद में छोटे कचरा संग्रह के बाद यदि कोई वस्तु बचता है तो उसे 1 जीवित रहने और फिर जीवित 2 को पहले प्रमुख कचरा संग्रहण से पहले उस वस्तु को पुराने या टिकाऊ पीढ़ी में ले जाया जाता है।

जावा हीप का पर्म स्पेस है, जहां कक्षाएं और विधियों, स्ट्रिंग पूल और कक्षा स्तर के विवरण के बारे में मेटाडाटा जेवीएम स्टोर करता है।

कूड़ा संग्रह के लिए गर्मी पीढ़ियों

अधिक के लिए यहां देखें: कचरा संग्रहण


आप जेवीएम को कचरा संग्रहण चलाने के लिए बाध्य नहीं कर सकते हैं, हालांकि आप System.gc() या Runtime.gc() विधि का उपयोग कर एक अनुरोध कर सकते हैं।

Java.lang.System में

 public static void gc() { Runtime.getRuntime().gc(); } 

Java.lang.Runtime में

 public native void gc(); // note native method 

मार्क और स्वीप एल्गोरिदम –

यह कचरा संग्रहण द्वारा उपयोग किए जाने वाले सबसे लोकप्रिय एल्गोरिदम में से एक है। कोई भी कचरा संग्रह एल्गोरिथम 2 मूल संचालन करना चाहिए एक, यह सभी पहुंच योग्य वस्तुओं का पता लगाने में सक्षम होना चाहिए और दूसरा, कचरा वस्तुओं द्वारा इस्तेमाल किए गए ढेर के स्थान को पुनः प्राप्त करना होगा और कार्यक्रम को फिर से स्थान उपलब्ध कराना होगा।

उपरोक्त कार्यों को दो चरणों में मार्क और स्वीप एल्गोरिदम द्वारा किया जाता है:

  1. चरण का निशान
  2. स्वीप चरण

अधिक जानकारी के लिए यहां पढ़ें – मार्क और स्वीप एल्गोरिथम

कचरा कलेक्टर का अर्थ है कि अब वस्तुएं जो प्रोग्राम द्वारा जरूरी नहीं हैं "कचरा" हैं और इसे फेंक दिया जा सकता है।

कूड़ा कलेक्टर जेआरई का हिस्सा है जो सुनिश्चित करता है कि जो वस्तु संदर्भित नहीं हैं, स्मृति से मुक्त हो जाएगी
यह आमतौर पर चलता है जब आप ऐप मेमोरी से बाहर निकलते हैं। AFAIK में यह एक ग्राफ है, जो वस्तुओं और पृथक वस्तुओं के बीच के लिंक का प्रतिनिधित्व करता है, जिसे मुक्त किया जा सकता है।
प्रदर्शन को बचाने के लिए वर्तमान वस्तुओं को पीढ़ियों में बांटा गया है, हर बार जीसी एक ऑब्जेक्ट को स्कैन करता है और पाता है कि यह अभी भी अपनी पीढ़ी संख्या 1 (अधिकतम अधिकतम मान, 3 या 4 मुझे लगता है) की वृद्धि में संदर्भित है, और नई पीढ़ी पहले स्कैन कर रहे हैं (कम से कम स्मृति में ऑब्जेक्ट को और अधिक शायद इसकी आवश्यकता नहीं है) इसलिए जीसी रन हर समय स्कैन नहीं किए जा रहे सभी ऑब्जेक्ट्स
अधिक जानकारी के लिए इसे पढ़ें

कचरा कलेक्टर आपके कंप्यूटर को अनंत मेमोरी के साथ एक कंप्यूटर अनुकरण करने की अनुमति देता है। बाकी बस तंत्र है

यह पता लगाता है कि जब स्मृति की मात्रा अब आपके कोड से सुलभ नहीं हो जाती है, और उन हिस्सों को मुफ्त स्टोर में लौटा देती है।

संपादित करें: हाँ, लिंक सी # के लिए है, लेकिन सी # और जावा इस संबंध में समान हैं।

बहुत से लोग कचरा संग्रहण को इकट्ठा करते हैं और मृत वस्तुओं को हटाते हैं।
वास्तव में, जावा कचरा संग्रह विपरीत कर रहा है! लाइव ऑब्जेक्ट्स को ट्रैक किया गया है और बाकी सभी को कचरा नामित किया गया है

जब किसी ऑब्जेक्ट का अब उपयोग नहीं किया जाता है, तो कचरा कलेक्टर अंतर्निहित स्मृति को पुनः प्राप्त करता है और इसे भविष्य के ऑब्जेक्ट आवंटन के लिए पुन: उपयोग करता है। इसका अर्थ है कि कोई स्पष्ट विलोपन नहीं है और ऑपरेटिंग सिस्टम पर कोई स्मृति वापस नहीं दी गई है। यह निर्धारित करने के लिए कि अब कौन सा ऑब्जेक्ट्स उपयोग में नहीं हैं, JVM अंततः एक मार्क-एंड-स्वीप एल्गोरिथ्म कहलाता है।

अधिक विस्तृत जानकारी के लिए इसे देखें: http://javabook.compuware.com/content/ememory/how-garbage-collection-works.aspx

जावा में कचरा कलेक्टर क्या है?

जावा में ऑब्जेक्ट के जावा विनाश में स्वचालित रूप से जेवीएम द्वारा किया जाता है। जब किसी ऑब्जेक्ट का कोई संदर्भ नहीं होता है, तो उस ऑब्जेक्ट को अब जरूरी नहीं माना जाता है और ऑब्जेक्ट पर कब्जा कर लिया गया स्मृति जारी है। इस तकनीक को कूड़ा संग्रह कहा जाता है। यह जेवीएम द्वारा पूरा किया गया है

सी + + के विपरीत वस्तु को नष्ट करने की कोई स्पष्ट आवश्यकता नहीं है। यहां छवि विवरण दर्ज करें

स्मृति प्रबंधन किसी भी प्रोग्रामिंग भाषा के लिए सबसे महत्वपूर्ण कार्यों में से एक है। किसी ऐसे आवेदन को ध्यान में रखते हुए जो डेटा का एक सेट पढ़ता है और इसे किसी डाटाबेस में लिखने के बजाय, यह कुछ मध्यस्थ भंडारण स्थान का उपयोग करेगा जहां यह डाटाबेस में डालने से पहले डेटा संग्रहीत करेगा। अब, यदि उस मध्यस्थ स्मृति स्थान को पिछले आंकड़ों से साफ़ नहीं किया गया है, तो इसका परिणाम इसके थकावट में हो सकता है जो हमारे आवेदन को नीचे लाएगा। ऐसा होने से रोकने के लिए दो तरीके हो सकते हैं, एक, मैन्युअल रूप से सी ++ या सी की तरह मेमोरी को साफ़ करें, अन्यथा, कचरा संग्रहण की पृष्ठभूमि प्रक्रिया को स्वचालित रूप से इस काम के लिए उपयोग में लाएं।

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

http://www.studytonight.com/java/garbage-collection.php

http://beginnersbook.com/2013/04/java-garbage-collection/

जावा में कूड़ा संग्रह (और अन्य भाषाओं / प्लेटफॉर्म के रूप में भी) जावा रन-टाइम पर्यावरण (जेआरई) के लिए जावा ऑब्जेक्ट से पुनः उपयोग करने के लिए एक रास्ता है जो अब जरूरी नहीं है सरलतापूर्वक, जब जेआरई शुरू में शुरू होता है तो यह एक निश्चित मात्रा की स्मृति के लिए ऑपरेटिंग सिस्टम (ओ / एस) पूछता है जैसा कि JRE आपके एप्लिकेशन को चलाता है (जैसे) यह उस स्मृति का उपयोग करता है जब आपके ऐप्लीकेशन को उस मेमोरी का प्रयोग किया जाता है, तो जेआरई "कचरा कलेक्टर" आपके साथ आता है और अपने मौजूदा एप्लीकेशन के विभिन्न हिस्सों के उपयोग के लिए स्मृति को पुनः प्राप्त कर लेता है। जेआरई का "कूड़ा कलेक्टर" एक पृष्ठभूमि का काम है जो हमेशा चल रहा है और समय निकालने की कोशिश करता है जब सिस्टम कचरा रनों पर जाने के लिए निष्क्रिय हो जाता है।

एक वास्तविक दुनिया सादृश्य कचरा पुरुषों होगा जो आपके घर में आते हैं और आपके पुनर्नवीनीकरण कचरा उठाते हैं … अंत में, यह अपने आप और / या अन्य लोगों द्वारा अन्य तरीकों से पुन: उपयोग किया गया।

कचरा कलेक्टर को संदर्भ गणना प्रबंधक के रूप में देखा जा सकता है यदि कोई ऑब्जेक्ट बनाया गया है और इसके संदर्भ को एक चर में संग्रहीत किया गया है, तो इसकी संदर्भ संख्या एक के द्वारा बढ़ जाती है। निष्पादन के दौरान यदि उस चर को शून्य के साथ सौंपा गया है उस ऑब्जेक्ट के लिए संदर्भ गिनती घट जाती है। इसलिए ऑब्जेक्ट के लिए वर्तमान संदर्भ संख्या 0 है। अब जब कचरा कलेक्टर को निष्पादित किया जाता है, यह ऑब्जेक्ट के लिए संदर्भ संख्या 0 के साथ जांचता है। और उसे आवंटित संसाधनों को मुक्त करता है।

कचरा कलेक्टर अभिविन्यास कचरा संग्रह नीतियों द्वारा नियंत्रित किया जाता है।

आप यहां कुछ डेटा प्राप्त कर सकते हैं। http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html

कूड़ा कलेक्टर जेवीएम का एक घटक है।

सीपीयू मुक्त होने पर कचरा इकट्ठा करने के लिए इसका उपयोग किया जाता है।

यहां कचरा का मतलब अप्रयुक्त वस्तु है जो मुख्य कार्यक्रम की पृष्ठभूमि में चलता है

मुख्य कार्यक्रम की स्थिति पर नजर रखने के लिए

स्वत: कचरा संग्रह हेप मेमोरी को देखने की प्रक्रिया है, यह पहचानने के लिए कि कौन सा ऑब्जेक्ट्स उपयोग में हैं और जो नहीं हैं, और अप्रयुक्त ऑब्जेक्ट्स को हटा रहा है उपयोग में किसी ऑब्जेक्ट या संदर्भित ऑब्जेक्ट का मतलब है कि आपके प्रोग्राम का कुछ हिस्सा अभी भी उस ऑब्जेक्ट पर एक सूचक रखता है। आपके प्रोग्राम के किसी भी हिस्से से एक अप्रयुक्त ऑब्जेक्ट, या अनुप्रेषित वस्तु, अब संदर्भित नहीं है। इसलिए एक अनुप्रेषित वस्तु द्वारा उपयोग की जाने वाली स्मृति को पुनः प्राप्त किया जा सकता है।

सी की तरह एक प्रोग्रामिंग भाषा में, आवंटन और स्मृति को हटाना एक मैन्युअल प्रक्रिया है। जावा में, कचरा कलेक्टर द्वारा स्वचालित रूप से संभाला जाने वाली स्मृति को समाप्त करने की प्रक्रिया को नियंत्रित किया जाता है। कृपया बेहतर समझने के लिए लिंक की जांच करें। http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

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

कचरा संग्रह के मूल सिद्धांतों को एक ऐसे कार्यक्रम में डेटा ऑब्जेक्ट्स प्राप्त करना है, जिसे भविष्य में उपयोग नहीं किया जा सकता है, और उन वस्तुओं द्वारा उपयोग किए गए संसाधनों को पुनः प्राप्त करने के लिए। https://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29

लाभ

1) बग्स से बचाता है, जो तब होता है जब स्मृति का एक टुकड़ा मुक्त हो जाता है जबकि अभी भी उसे संकेत मिलता है, और उन बिंदुओं में से एक dereferenced है। https://en.wikipedia.org/wiki/Dangling_pointer

2) दोहरी मुक्त कीड़े, जो तब होती है जब प्रोग्राम स्मृति के एक क्षेत्र को मुक्त करने का प्रयास करता है जो कि पहले से ही मुक्त हो गया है, और शायद पहले से दोबारा आवंटित किया गया है।

3) कुछ प्रकार की स्मृति लीक से रोकता है, जिसमें एक प्रोग्राम ऑब्जेक्ट्स द्वारा कब्जा किए गए मेमोरी को मुक्त करने में विफल रहता है, जो कि स्मृति में थकावट पैदा कर सकता है।

नुकसान

1) अतिरिक्त संसाधनों, प्रदर्शन प्रभावों, प्रोग्राम निष्पादन में संभावित स्टालों, और मैनुअल संसाधन प्रबंधन के साथ असंगति का उपभोग करना। कचरा संग्रह जो स्मृति को मुक्त करने के लिए तय करने में कंप्यूटिंग संसाधनों की खपत करता है, भले ही प्रोग्रामर ने पहले से ही यह जानकारी जान ली हो।

2) जब वास्तव में कचरा इकट्ठा किया जाता है, तो अप्रत्याशित हो सकता है, जिसके परिणामस्वरूप एक सत्र में बिखरे हुए स्टालों (पाइप / फ्री मेमोरी) अनपेक्षित स्टालों वास्तविक समय के वातावरणों में, लेनदेन प्रसंस्करण में, या इंटरैक्टिव कार्यक्रमों में अस्वीकार्य हो सकते हैं।


ऑरेकल ट्यूटोरियल http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

कचरा संग्रहण प्रक्रिया है जो वस्तुओं को उपयोग में है और जो नहीं हैं, और अप्रयुक्त ऑब्जेक्ट को हटा रहा है।

सी, सी ++ जैसी प्रोग्रामिंग भाषाओं में, आवंटित करने और स्मृति मुक्त करना एक मैन्युअल प्रक्रिया है।

 int * array = new int[size]; processArray(array); //do some work. delete array; //Free memory 

इस प्रक्रिया में पहला कदम अंकन कहा जाता है। यह वह जगह है जहां कचरा कलेक्टर पहचानता है कि कौन से टुकड़े मेमोरी उपयोग में हैं और जो नहीं हैं।

चरण 2 ए सामान्य हटाए गए संदर्भित ऑब्जेक्ट और पॉइंटर्स को रिक्त स्थान पर छोड़ने वाले बिना संदर्भित ऑब्जेक्ट को निकाल देता है।

प्रदर्शन में सुधार करने के लिए, हम बिना संदर्भित वस्तुओं को हटाना चाहते हैं और शेष संदर्भित वस्तुओं को भी कॉम्पैक्ट करना चाहते हैं। हम संदर्भित ऑब्जेक्ट को एक साथ रखना चाहते हैं, इसलिए यह नई मेमोरी आवंटित करने के लिए तेज़ हो जाएगा।

जैसा कि पहले कहा गया है, एक जेवीएम में सभी वस्तुओं को चिह्नित और कॉम्पैक्ट करना अक्षम है। जितनी अधिक वस्तुओं को आवंटित किया जाता है, ऑब्जेक्ट्स की सूची बढ़ती है और बढ़ती जाती है, इससे अब तक कचरा संग्रहण समय बढ़ जाता है।

इस ट्यूटोरियल को पढ़ना जारी रखें, और आप जान लेंगे कि जीसी इस चुनौती को कैसे ले लेता है

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

चूंकि वस्तुओं को नए ऑपरेटर द्वारा गतिशील रूप से आवंटित किया जाता है, आप यह पूछ सकते हैं कि ये ऑब्जेक्ट कैसे नष्ट हो जाते हैं और कितनी व्यस्त मेमोरी मुक्त होती है। अन्य भाषाओं जैसे सी ++ में आपको मैन्युअल रूप से आबंटित ऑब्जेक्ट्स को गतिशील रूप से हटाए जाने के ऑपरेटर से मुक्त करने की आवश्यकता है। जावा का एक अलग दृष्टिकोण है; स्वचालित रूप से deallocation संभालता है इस तकनीक को कूड़ा संग्रह के रूप में जाना जाता है।

यह इस तरह काम करता है: जब किसी ऑब्जेक्ट का कोई संदर्भ नहीं होता है, तो यह माना जाता है कि यह ऑब्जेक्ट अब जरूरी नहीं है और आप ऑब्जेक्ट द्वारा कब्जा किए गए स्मृति को पुनः प्राप्त कर सकते हैं। सी ++ के रूप में वस्तुओं को स्पष्ट रूप से नष्ट करना आवश्यक नहीं है कचरा संग्रह कार्यक्रम निष्पादन के दौरान छिटपुट ढंग से होता है; यह केवल इसलिए नहीं होता है क्योंकि एक या अधिक ऑब्जेक्ट्स हैं जो अब इस्तेमाल नहीं की जाती हैं। इसके अलावा, कई जावा रनटाइम कार्यान्वयन के कचरा संग्रहण के लिए अलग-अलग दृष्टिकोण हैं, लेकिन अधिकांश प्रोग्रामर को प्रोग्राम लिखने के बारे में चिंता नहीं है

एक वस्तु कचरा संग्रहण या जीसी के लिए योग्य हो जाता है यदि यह किसी भी लाइव धागे से या किसी भी स्थिर संदर्भों तक पहुंच नहीं है।

दूसरे शब्दों में, आप कह सकते हैं कि एक ऑब्जेक्ट कचरा संग्रह के लिए पात्र हो जाता है, यदि इसके सभी संदर्भ शून्य हैं। चक्रीय निर्भरता को संदर्भ के रूप में गिना नहीं जाता है, यदि ऑब्जेक्ट ए के ऑब्जेक्ट बी के संदर्भ हैं और ऑब्जेक्ट बी ऑब्जेक्ट ए के संदर्भ में है और उनके पास कोई अन्य लाइव संदर्भ नहीं है तो ऑब्जेक्ट ए और बी दोनों कूड़ा संग्रह के लिए पात्र होंगे।


कूड़ा संग्रह के लिए गर्मी पीढ़ियों –

जावा ऑब्जेक्ट्स Heap में निर्मित होते हैं और Heap को जावा में कचरा संग्रह के लिए तीन भागों या पीढ़ियों में विभाजित किया जाता है, इन्हें यंग (न्यू) पीढ़ी, टेनराइड (ओल्ड) जनरेशन और मैप के पर्म क्षेत्र के रूप में कहा जाता है।

जावा हीप स्पेस नई पीढ़ी को तीन भागों में बांटा गया है जिसे ईडन अंतरिक्ष, उत्तरजीवी 1 और उत्तरजीवी 2 अंतरिक्ष कहा जाता है। जब कोई ऑब्जेक्ट पहले ढेर में बनाया होता है तो इसकी नई पीढ़ी में एडेन स्पेस के भीतर बनाई जाती है और बाद में छोटे कचरा संग्रह के बाद यदि कोई वस्तु बचता है तो उसे 1 जीवित रहने और फिर जीवित 2 को पहले प्रमुख कचरा संग्रहण से पहले उस वस्तु को पुराने या टिकाऊ पीढ़ी में ले जाया जाता है।

जावा हीप का पर्म स्पेस है, जहां कक्षाएं और विधियों, स्ट्रिंग पूल और कक्षा स्तर के विवरण के बारे में मेटाडाटा जेवीएम स्टोर करता है।

कूड़ा संग्रह के लिए गर्मी पीढ़ियों

स्वत: कचरा संग्रह एक ऐसी प्रक्रिया है जहां पर जीवीएम को छुटकारा दिलाया जाता है या कुछ डाटा पॉइंट को मेमोरी में रखता है ताकि अंत में चलने वाले कार्यक्रम के लिए स्थान खाली हो। मेमोरी को पहले ढेर मेमोरी में भेजा जाता है, यही वह जगह है जहां कचरा कलेक्टर (जीसी) उसके काम करता है, फिर इसे समाप्त करने का फैसला किया जाता है या रखा जाता है। जावा ग्रहण करता है कि प्रोग्रामर हमेशा पर भरोसा नहीं किया जा सकता, इसलिए यह उन वस्तुओं को समाप्त कर देता है जिन्हें लगता है कि इसकी आवश्यकता नहीं है।