Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Javascript

जावास्क्रिप्ट में मेमोरी लीक का उन्मूलन

<घंटा/>

कचरा एकत्रित भाषाओं में लीक का मुख्य कारण अवांछित संदर्भ हैं। मेमोरी लीक को समझने के लिए, आइए देखें कि मेमोरी फ्रीिंग (कचरा संग्रह) कैसे काम करता है।

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

मेमोरी लीक के प्रकार

<मजबूत>1. वैश्विक चर (अघोषित/आकस्मिक)

JS में, यदि आप एक घोषणा कीवर्ड (let, var, const) निर्दिष्ट नहीं करते हैं, तो आप वैश्विक रूप से एक चर घोषित कर सकते हैं। जेएस वैश्विक दायरे तक पहुंचने तक दायरे से बाहर निकलता हुआ दिखता है और अगर उसे किसी भी दायरे में चर नहीं मिलता है, तो यह एक वैश्विक चर बनाता है।

उदाहरण

function test() {
   a = [1, 2, 3]
}
test()
// a was initialized without declaration using a keyword and is now in the global scope.
console.log(a)

आउटपुट

[1, 2, 3]

यह व्यवहार स्मृति रिसाव का कारण बन सकता है क्योंकि चर अनजाने में वैश्विक दायरे में मौजूद हैं और जब तक कार्यक्रम समाप्त नहीं हो जाता तब तक मुक्त नहीं किया जाएगा। इसे डिक्लेरेशन कीवर्ड का उपयोग करके ठीक किया जा सकता है।

<मजबूत>2. बंद करना

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

<मजबूत>3. अलग किया गया DOM/DOM संदर्भ से बाहर

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

<मजबूत>4. घटना श्रोता

AddEventListener () विधि एक ईवेंट हैंडलर को एक तत्व से जोड़ती है और एक ही तत्व में कई ईवेंट हैंडलर जोड़े जा सकते हैं। यदि DOM तत्व और उसके ईवेंट श्रोता का जीवनचक्र समान नहीं है, तो इससे मेमोरी लीक हो सकती है।


  1. जावास्क्रिप्ट डोम क्या है?

    जावास्क्रिप्ट दस्तावेज़ ऑब्जेक्ट मॉडल (डीओएम) एक वेबपेज के HTML तत्वों का प्रतिनिधित्व है। यह एक इंटरफ़ेस है जिसका उपयोग हम किसी वेब पेज की सामग्री या शैली को बदलकर उसमें हेरफेर करने के लिए कर सकते हैं। हम वेबपेज पर राइट क्लिक करके और निरीक्षण का चयन करके DOM तक पहुँच सकते हैं। ऐसा करने से, जिस व

  1. DOM को अपडेट करने के लिए JavaScript प्रोग्राम

    जावास्क्रिप्ट में DOM को अपडेट करने के लिए कोड निम्नलिखित है - उदाहरण <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document&

  1. जावा में मेमोरी लीक

    जावा में, कचरा संग्रहण (विनाशक का कार्य) कचरा संग्रहण का उपयोग करके स्वचालित रूप से किया जाता है। लेकिन क्या होगा यदि ऐसी वस्तुएं हैं जिनके कोड में उनके संदर्भ हैं? इसे डी-आवंटित नहीं किया जा सकता है, अर्थात उनकी स्मृति को साफ़ नहीं किया जा सकता है। यदि ऐसी स्थिति बार-बार आती है, और निर्मित या संदर्