/ / जावा में System.gc () और फाइनल () विधि के बीच क्या अंतर है? - जावा, कचरा-संग्रह, अंतिम रूप

जावा में System.gc () और फाइनल () विधि के बीच अंतर क्या है? - जावा, कचरा-संग्रह, अंतिम रूप

मैं सिस्टम के बीच में भ्रमित हूं।जीसी () और अंतिम () जावा की विधि। हम "JVM के लिए कचरा वस्तु एकत्र करने के लिए बल" कर सकते हैं। हमें अपने जावा कोड में दोनों विधियों को लिखने की अनुमति है, यदि दोनों का उपयोग कचरा संग्रह के लिए किया जाता है, तो जावा द्वारा कचरा संग्रह के लिए दो तरीके प्रदान करने में क्या मतलब है?

कृपया मुझे दोनों तरीकों की सटीक कार्यप्रणाली बताएं और आंतरिक रूप से यह कैसे काम करता है?

उत्तर:

उत्तर № 1 के लिए 11

System.gc() कृपया सिटेम से कचरा संग्रह करने के लिए कहें। जावदोक कहते हैं:

कूड़ा बीनने वाला चलाता है।

आप यह नियंत्रित नहीं कर सकते कि कचरा "कठिन" कैसे हैकलेक्टर करेंगे काम कैसे कचरा संग्रहकर्ता आंतरिक रूप से वीएम-विशिष्ट है और अपने आप में एक शोध विषय है। लेकिन आमतौर पर "पूर्ण" कचरा संग्रह और कुछ छोटे "वृद्धिशील" संग्रह चल रहे हैं। तो विचार करें System.gc एक अनुरोध के रूप में, लेकिन इस बात की गारंटी नहीं है कि आपकी वस्तु का कचरा संग्रह होगा।

Object.finalize() यह निर्दिष्ट करने के लिए ओवरराइड किया जा सकता है कि किसी दिए गए ऑब्जेक्ट को एकत्र किए जाने पर क्या करना है (वास्तव में कचरा एकत्र होने से ठीक पहले क्या करना है)। जावदोक कहते हैं:

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

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

जब जेवीएम बाहर निकलता है तो कार्रवाई करने के लिए अंतिम रूप का उपयोग न करें। इस प्रयोजन के लिए एक शटडाउन हुक का उपयोग करें जिसे आप रजिस्टर करते हैं Runtime.getRuntime().addShutdownHook(Thread).


जवाब के लिए 2 № 2

System.gc() कचरा इकट्ठा करने वाले को चलाने के लिए मजबूर करता है, जबकि Finalize() आपकी वस्तु की विधि निर्धारित करती है कि इस विशिष्ट वस्तु को एकत्रित करते समय कचरा संग्राहक क्या करना चाहिए।

मोटे तौर पर, यह इस तरह है:

class MyClass {
public UnmanagedResource resource;

void Finalize() {
FreeUnmanagedResource(resource);
}
}

MyClass[] data = new MyClass[1000];
for(int i=0; i<1000; i++) {
data[i] = new MyClass();
}
//do some work
data = null;
System.gc(); //Note that it doesn"t guarantee you that all MyClass instances will be actually collected at this point.

उत्तर № 3 के लिए 1

system.gc() विधि जेवीएम को सूचित करती है कि अप्रयुक्त वस्तुओं को हटाकर स्मृति को खाली करने के लिए कचरा कलेक्टर अब चला सकते हैं जावा डॉक्टर के अनुसार:

जीसी विधि को कॉल करने से पता चलता है कि जावावर्चुअल मशीन व्यय की गई वस्तुओं को पुन: उपयोग करने के लिए अनुपयोगी वस्तुओं को पुन: उपयोग करने की दिशा में प्रयास करती है जो कि वे वर्तमान में त्वरित पुन: उपयोग के लिए उपलब्ध हैं। जब विधि कॉल से नियंत्रण वापस आता है, तो जावा वर्चुअल मशीन ने सभी खारिज वस्तुओं से अंतरिक्ष को पुनः प्राप्त करने का एक अच्छा प्रयास किया है।

finalize() विधि कचरा संग्राहक को ट्रिगर नहीं करेगी, बल्कि इसे बुलाया जाएगा जबकि कचरा कलेक्टर वस्तु को नष्ट करने के बारे में। यह ऑब्जेक्ट को ठीक से साफ़ करने के निर्देश प्रदान करता है।


उत्तर के लिए 1 № 4

प्रणाली।gc () विधि कचरा नए कीवर्ड द्वारा बनाई गई वस्तुओं को इकट्ठा करता है, जबकि अंतिम () विधि का उपयोग तब किया जाता है जब हम उन वस्तुओं को इकट्ठा करना चाहते हैं जो नए कीवर्ड का उपयोग करके नहीं बनाई गई हैं। तो, मैं इस ans लगता है। आपका क्यू


जवाब के लिए 0 № 5

कचरा इकठा करना का उपयोग ऑब्जेक्ट की आवंटित मेमोरी को पुनः प्राप्त करने के लिए किया जाता है और Finalize() मेमोरी को पुनः प्राप्त करने से पहले कचरा कलेक्टर द्वारा बुलाया जाता है Finalize() विधि ज्यादातर वस्तु को हटाने से पहले कुछ ऑपरेशन करने के लिए उपयोग किया जाता है


जवाब के लिए 0 № 6

कई वर्ग हैं जिनमें सम्‍मिलित हैंअंतिम रूप () विधि, मुझे लगता है कि आप ऑब्जेक्ट क्लास में एक का मतलब है। System.gc () जिसे आप कॉल करते हैं जब आप चाहते हैं कि जावा का कचरा संकलक चले। यह हर कुछ मिनटों में अपने आप चल जाएगा, लेकिन आप इसे जब चाहें तब जाने के लिए कह सकते हैं। जब गार्बेज कलेक्टर चलता है, तो यह प्रत्येक ऑब्जेक्ट पर अंतिम रूप () विधि को कॉल करता है जिसमें कोई अधिक संदर्भ नहीं होता है। मूल रूप से, System.gc () मेमोरी को साफ करता है, और व्यक्तिगत वस्तुओं से छुटकारा पाने के लिए अंतिम रूप () का उपयोग करता है।


उत्तर के लिए 0 № 7

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

जैसा कि जोशुआ बलोच द्वारा प्रभावी जावा में लिखा गया है:

फाइनल अप्रत्याशित हैं, अक्सर खतरनाक होते हैं, और आम तौर पर अनावश्यक। एक फाइनल में कुछ भी समय महत्वपूर्ण नहीं है। कभी नहीँ महत्वपूर्ण लगातार स्थिति को अद्यतन करने के लिए एक अंतिम रूप पर निर्भर करता है।

तथा:

अरे, और एक बात: के लिए एक गंभीर प्रदर्शन दंड है फाइनल का उपयोग कर। मेरी मशीन पर, बनाने और नष्ट करने का समय साधारण वस्तु 5.6 ns है। फाइनल को जोड़ने से समय बढ़ता है से 2,400 एन.एस. दूसरे शब्दों में, यह बनाने के लिए लगभग 430 गुना धीमा है और फाइनल के साथ वस्तुओं को नष्ट।

निम्नलिखित संसाधन समाप्त करने की कोशिश कर रहे संसाधन का उपयोग करना पसंद करें, जिन्हें चलाने की गारंटी दी जाती है:

Bar bar = new Bar(...);
try {
// Your code here
} finally {
bar.releaseResource(); // You implementation. For example close connection
}

जवाब के लिए 0 № 8

कूड़ा बीनने वाले को बुलाकर बुलाया जाता है System.gc() किसी भी वर्ग पर विधि। लेकिन यह गारंटी नहीं देता है कि सभी प्राणविहीन jvm बन्द होने से पहले वस्तुओं को एकत्र किया जाएगा। तो मूल रूप से gc() विधि केवल उन वस्तुओं को इकट्ठा करने के लिए कचरा है जो नए कीवर्ड का उपयोग करके बनाई गई हैं। ऑब्जेक्ट्स किसी अन्य लॉजिक द्वारा बनाए गए हैं, इसके अलावा यह स्पष्ट रूप से कॉल करके एकत्रित किया गया कचरा होगा finalize() पहले विधि gc कचरा बीनने वाले को बुलाता है।