मेरे पास कोड का एक टुकड़ा है जो स्मृति में एक बहुत बड़ी छवि लोड करता है। तो यह छवि को लोड करने से पहलेकब कचरा संग्रहण
System.gc();
पर कॉल करने के लिए उचित बात की तरह लग रहा था। मैं जो कह सकता हूं उससे कोई समस्या नहीं है।
कल मैंने FindBugs नामक सॉफ़्टवेयर का एक बहुत ही उपयोगी टुकड़ा उपयोग करने का निर्णय लिया जो आपके कोड को स्कैन करता है और उन समस्याओं को रिपोर्ट करता है जो बग या आम तौर पर सलाह नहीं दे सकते हैं। समस्या यह है कि मेरे द्वारा वर्णित कोड का यह टुकड़ा रिपोर्ट हो जाता है। विवरण यह है:
... कचरा संग्रह को मजबूर करता है; बेंच मार्किंग कोड
में छोड़कर अत्यंत संदिग्ध और यह विस्तृत करने पर चला जाता है:
कोड स्पष्ट रूप से कचरा संग्रह invokes। बेंचमार्किंग में विशिष्ट उपयोग के अलावा, यह बहुत संदिग्ध है।
अतीत में, स्थितियों में, जहां लोगों स्पष्ट रूप से इस तरह के करीब या को अंतिम रूप देने के तरीकों के रूप में दिनचर्या में कचरा कलेक्टर लागू है विशाल प्रदर्शन ब्लैक होल के लिए प्रेरित किया। कचरा संग्रह महंगा हो सकता है। कोई भी स्थिति जो सैकड़ों या हजारों कचरा संग्रहों को मजबूर करती है मशीन को क्रॉल में लाएगी।
तो मेरे सवाल है: यह नहीं ठीक प्रोग्राम के रूप में इस तरह के एक मामले में कचरा कलेक्टर कॉल करने के लिए है? मेरा कोड केवल इसे एक बार कॉल करता है और जिस विधि में यह है, वह शायद ही कभी उपयोग किया जाता है। और यदि इसे कॉल करना ठीक नहीं है तो आपको एक ऐसे मामले में क्या करना चाहिए जहां आपको बहुत मेमोरी गहन ऑपरेशन करने से पहले जितनी मेमोरी चाहिए उतनी मेमोरी चाहिए और आपको इससे पहले जितनी मेमोरी उतनी ही खाली होनी चाहिए?
इस मामले में आप शायद प्रदर्शन को क्रमबद्ध कर रहे हैं। यदि आप जीसी को कब चलाना तय करते हैं, तो यह ठीक से चल सकता है जब एप्लिकेशन I/O पर अवरुद्ध हो रहा है। –
प्रश्न: System.gc() को कब कॉल करें। ए: कभी भी – KitsuneYMG
वाह जो अंतर्दृष्टि भरा था। मैं पूरी तरह से समझता हूं कि मुझे आपके जवाब से जीसी क्यों नहीं कहना चाहिए। आपका बहुत बहुत धन्यवाद। –