कचरा संग्रह स्वचालित रूप से तब कहा जाता है जब किसी ऑब्जेक्ट को फिर से पेश किया जाता है, अब किसी भी चर के लिए उपलब्ध नहीं है। लेकिन मुझे पता है कि हम System.gc() का स्पष्ट रूप से क्यों कॉल करते हैं जब कचरा संग्रह स्वचालित रूप से कहा जाता है। जब हम System.gc() को कॉल करते हैं;. हमें System.gc(); को कॉल करने की आवश्यकता क्यों है ??
उत्तर
हम नहीं करते हैं।
हम बस नहीं करते हैं।
शायद मेरा अनुभव सीमित है, लेकिन मेरे पास है को System.gc() को कॉल करने के लिए आवश्यक नहीं मिला।
मैं प्रदर्शन पहलू पर Brian Goetz बोली (यदि आप उसके बारे में नहीं सुना है, उसे देखो - भी और इस अनुच्छेद के बाकी को पढ़ने के लिए):
एक तीसरा वर्ग जहां डेवलपर्स अक्सर गलती से लगता है कि वे कचरा कलेक्टर की मदद कर रहे हैं
System.gc()
का उपयोग है, जो एक कचरा संग्रह ट्रिगर करता है (वास्तव में, यह केवल सुझाव देता है कि यह कचरा संग्रह के लिए एक अच्छा समय हो सकता है)। दुर्भाग्यवश,System.gc()
एक पूर्ण संग्रह ट्रिगर करता है, जिसमें ढेर में सभी जीवित वस्तुओं का पता लगाना और पुरानी पीढ़ी को व्यापक बनाना और कॉम्पैक्ट करना शामिल है। यह बहुत काम हो सकता है।सामान्य रूप से, सिस्टम को यह तय करना बेहतर होता है कि इसे ढेर एकत्र करने की आवश्यकता होती है, और पूर्ण संग्रह करना है या नहीं।
आप नहीं करते हैं। जैसा कि आप कहते हैं, कचरा संग्रह स्वचालित है। System.gc() कचरा संग्रह को भी मजबूर नहीं करता है; यह केवल जेवीएम के लिए एक संकेत है कि "अब थोड़ा साफ करने का अच्छा समय हो सकता है"
सामान्य रूप से, कचरा कलेक्टर को System.gc() के साथ जो कुछ भी आप चाहते हैं उसे करने के लिए मजबूर करने की कोशिश कर रहा है एक हैक जो लोग सोचते हैं कि वे वास्तव में उनके मुकाबले बेहतर जानते हैं, या टूटी हुई कोड के लिए एक (प्रयास) कामकाज के रूप में।
मैं वर्षों के लिए जावा लिख रहा है और मैं अभी तक एक स्थिति है जहाँ बुला System.gc वास्तव में (मैं लिखा है कुछ भी में) ऐसा करना सही
मैंने त्रुटिपूर्ण कोड देखा है जो वास्तव में सिस्टम.gc() के साथ धीरे-धीरे चलता है, डेवलपर्स द्वारा वे सोचते हैं कि वे बेहतर जानते हैं। –
JVM (ज्यादातर एम्बेडेड/कम अंत हार्डवेयर के लिए) के कुछ कार्यान्वयन जब System.gc() कहा जाता है तो कचरा इकट्ठा करने का वादा करता है। फिर भी आपको इसकी आवश्यकता नहीं होनी चाहिए। – Thirler
कई कचरा संग्रह एल्गोरिदम आपके प्रोग्राम को बाधित करते हैं, जब तक कि रीपिंग पूर्ण नहीं हो जाता है तब तक सभी धागे पर निष्पादन को अवरुद्ध कर दें। 'System.gc()' को कॉल करना बहुत बार प्रदर्शन को गंभीर रूप से चोट पहुंचाएगा और लगभग (लगभग) हमेशा अनावश्यक होगा। – Matthew
आप की जरूरत नहीं है था देखने के लिए है यह। इसे एक डायग्नोस्टिक टूल के रूप में सोचें, जैसे डीबग कंसोल पर लिखने में सक्षम होना।
उदाहरण के लिए, कल्पना करें कि यदि आप बेंचमार्किंग कर रहे थे, तो आप प्रत्येक बेंचमार्क चलाने के बाद जीसी को कचरा इकट्ठा करना चाहते हैं।
इसे चाहिए। यह बहुत उपयोगी है इससे कोई फर्क नहीं पड़ता कि ये अन्य लोग क्या कहते हैं।
एक उपयोग उदाहरण: कहें कि आपने अभी तक एक लंबा पृष्ठभूमि कार्य पूरा कर लिया है जिसने बहुत सारी मेमोरी का उपयोग किया है। उन वस्तुओं में से कोई भी फिर से उपयोग नहीं किया जा रहा है। चूंकि कार्य में काफी समय लगेगा क्योंकि उपयोगकर्ता 5-10 सेकेंड के बारे में परवाह नहीं करेगा। यह कचरा इकट्ठा करने के लिए एक अच्छा समय है।
यदि आप उस समय जीसी नहीं करते हैं, तो यह बाद में होने वाला है। शायद प्रोग्राम के इंटरैक्टिव उपयोग के दौरान जिस बिंदु पर उपयोगकर्ता का अनुभव चंचल हो जाता है।
- 1. हमें सी # प्रतिनिधियों की आवश्यकता क्यों है
- 2. हमें संरचना की आवश्यकता क्यों है? (सी #)
- 3. हमें लक्ष्य नामस्थान की आवश्यकता क्यों है?
- 4. हमें strdup() की आवश्यकता क्यों है?
- 5. हमें फ़ील्ड टैग की आवश्यकता क्यों है?
- 6. हमें "हटाएं []" ऑपरेटर की आवश्यकता क्यों है?
- 7. हमें वेब-सॉकेट की आवश्यकता क्यों है?
- 8. हमें डिज़ाइन पैटर्न की आवश्यकता क्यों है
- 9. हमें यहां टाइपनाम की आवश्यकता क्यों है?
- 10. हमें "आउट" पैरामीटर की आवश्यकता क्यों है?
- 11. हमें ShowWindow के बाद UpdateWindow को कॉल करने की आवश्यकता क्यों है?
- 12. हमें RuntimeException में प्रयास करने की आवश्यकता क्यों नहीं है?
- 13. हमें क्यों जारी रखने की विधि की आवश्यकता है?
- 14. पर्यवेक्षकों को सूचित करने से पहले मुझे सेट चेंज को कॉल करने की आवश्यकता क्यों है?
- 15. हमें जावा में इंटरफेस की आवश्यकता क्यों है?
- 16. हमें हडोप स्टैक में ज़ूकीपर की आवश्यकता क्यों है?
- 17. हमें Nuget जैसे पैकेज प्रबंधक की आवश्यकता क्यों है?
- 18. हमें ढांचे के ढांचे की आवश्यकता क्यों है?
- 19. हमें मॉलोक रिटर्न डालने की आवश्यकता क्यों है?
- 20. हमें सजावटी डिजाइन पैटर्न में सजावट की आवश्यकता क्यों है?
- 21. हमें सी ++ में शुद्ध आभासी विनाशक की आवश्यकता क्यों है?
- 22. हमें एक निजी निर्माता की आवश्यकता क्यों है?
- 23. हमें ब्लॉक मैक्रो के आसपास कोष्ठक की आवश्यकता क्यों है?
- 24. हमें मूल क्वेरी बनाने की आवश्यकता क्यों है?
- 25. हमें अभी भी जेनरेट कोड की आवश्यकता क्यों है?
- 26. हमें एक अस्थायी डेटाबेस की आवश्यकता क्यों है?
- 27. __i686.get_pc_thunk.bx क्या है? हमें इस कॉल की आवश्यकता क्यों है?
- 28. हमें डेटाबेस टेबल्स में ऑडिट कॉलम की आवश्यकता क्यों है?
- 29. सेटिड() उपयोगी कब है, या हमें लिनक्स में प्रक्रियाओं को समूहबद्ध करने की आवश्यकता क्यों है?
- 30. PHP: हमें स्ट्रिंग तुलना फ़ंक्शन की आवश्यकता क्यों है?
आपको सिस्टम.gc() को कभी भी कॉल नहीं करना चाहिए। आपको ऐसा क्यों लगता है कि आपको इसे कॉल करने की आवश्यकता है? –