लेकिन उपयोग करने के लिए System.exit (0) जावा में - कैसे इसे यहाँ है? क्या इस संदर्भ में कचरा-कलेक्टर पर भरोसा किया जा सकता है?
जब आप जावा में System.exit
फोन, कचरा कलेक्टर सामान्य रूप से नहीं चला है। हालांकि, किसी भी जेवीएम में मैंने कभी सुना है, कुछ और है जो आवंटित सभी वस्तुओं को पुनः प्राप्त करता है। (आमतौर पर इसे ऑपरेटिंग सिस्टम स्तर पर संभाला जाता है।)
तथ्य यह है कि जीसी नहीं चलता है, यदि आप ऑब्जेक्ट फ़ाइनलाइज़र पर निर्भर हैं तो JVM समाप्त होने से पहले कुछ महत्वपूर्ण है।
हाइपोटेटिक रूप से, यदि आपके जावा एप्लिकेशन ने देशी तरीकों को कॉल करने के लिए जेएनआई (आदि) का उपयोग किया, तो वे विधियां सिस्टम संसाधनों तक पहुंच सकती हैं जो समस्याग्रस्त हो सकती हैं। हालांकि:
एक सामान्य नियम के ऑपरेटिंग सिस्टम ऐसी बातों का ख्याल रखना करता है। कम से कम यह लिनक्स और यूनिक्स, AFAIK के आधुनिक संस्करणों के लिए करता है।
कचरा कलेक्टर को वैसे भी उन संसाधनों का कोई ज्ञान नहीं है। यदि ओएस उन्हें पुनः प्राप्त नहीं कर सकता है, तो जावा कचरा कलेक्टर मदद नहीं करेगा।
आप (मूल कोड के माध्यम से) एक जावा प्रोग्राम द्वारा अधिग्रहीत ऐसे संसाधनों को साफ करने की जरूरत थी तो सबसे अच्छा तरीका मूल कोड तरीकों में सफाई को लागू करना तथा चलाने के लिए एक "बंद हुक" का उपयोग करने के होगा उन्हें। यदि आप System.exit
पर कॉल करते हैं तो शट डाउन हुक चलाए जाएंगे।
1 - एक कचरा संग्रहण JVM बाहर निकलने पर प्रदर्शन किया जाएगा यदि आपने पहले runFinalizersOnExit(true)
कहा जाता है। हालांकि, यह विधि से वंचित है। ओरेकल साइट इसे इस तरह बताते हैं:
प्र: Runtime.runFinalizersOnExit बहिष्कृत हो गई है?
ए: क्योंकि यह स्वाभाविक रूप से असुरक्षित है। इसके परिणामस्वरूप अंतिम वस्तुओं को अंतिम वस्तुओं पर बुलाया जा सकता है जबकि अन्य धागे एक साथ उन वस्तुओं को जोड़ते हैं, जिसके परिणामस्वरूप अनियमित व्यवहार या डेडलॉक होता है। हालांकि इस समस्या को रोका जा सकता है यदि जिस वर्ग की वस्तुओं को अंतिम रूप दिया जा रहा है, उसे इस कॉल के खिलाफ "बचाव" करने के लिए कोड किया गया था, तो अधिकांश प्रोग्रामर इसके खिलाफ बचाव नहीं करते हैं। वे मानते हैं कि उस समय एक ऑब्जेक्ट मर चुका है जब इसके फाइनलाइज़र को बुलाया जाता है।
आगे, कॉल इस अर्थ में "थ्रेड-सुरक्षित" नहीं है कि यह एक वीएम-वैश्विक ध्वज सेट करता है। यह लाइव ऑब्जेक्ट्स को अंतिम रूप देने के खिलाफ बचाव के लिए प्रत्येक वर्ग को अंतिम रूप देने के लिए मजबूर करता है!
संक्षेप में, यह एक खतरनाक दृष्टिकोण है, और यह सीधे संसाधनों की तरह है कि ओपी के बारे में चिंतित है के साथ सौदा नहीं होगा।
यदि आप एप्लिकेशन को मारने वाले हैं तो कचरा संग्रहण की परवाह क्यों करते हैं? –
यह अप्रासंगिक है - आप एप्लिकेशन को मारने वाले हैं। यह सभी स्मृति मुक्त कर देगा। तो कचरा संग्रह की परवाह क्यों करें? – SevenBits
@ सॉटिरियोस डेलिमैनोलिस - नहीं! जावा एंड्रॉइड में आप गतिविधि को मार सकते हैं, एसर – user2991252