"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > जावास्क्रिप्ट मेमोरी प्रबंधन और कचरा संग्रहण

जावास्क्रिप्ट मेमोरी प्रबंधन और कचरा संग्रहण

2024-11-08 को प्रकाशित
ब्राउज़ करें:542

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

जावास्क्रिप्ट में मेमोरी आवंटन
जब वेरिएबल घोषित किए जाते हैं तो जावास्क्रिप्ट स्वचालित रूप से मेमोरी आवंटित करता है और जब आवश्यकता नहीं होती है तो इसे हटा देता है। हालाँकि, यह जानना कि मेमोरी कैसे आवंटित की जाती है - स्टैक बनाम हीप - जटिल ऐप्स में संसाधनों को कुशलतापूर्वक प्रबंधित करने के लिए महत्वपूर्ण है।

1. स्टैक मेमोरी:

  • आदिम मान संग्रहीत करता है (उदाहरण के लिए, संख्याएं, बूलियन)।

  • LIFO (लास्ट-इन, फर्स्ट-आउट) एक्सेस, इसे छोटे डेटा के लिए तेज़ बनाता है।

2. ढेर मेमोरी:

  • ऑब्जेक्ट और फ़ंक्शन जैसे संदर्भ प्रकारों के लिए उपयोग किया जाता है।

  • पहुंचने में बड़ा और धीमा लेकिन लचीला।

कचरा संग्रहण कैसे काम करता है
अप्रयुक्त मेमोरी को हटाने के लिए जावास्क्रिप्ट एक मार्क-एंड-स्वीप एल्गोरिदम का उपयोग करता है। जब किसी वस्तु का संदर्भ नहीं रह जाता है, तो वह "कचरा" बन जाती है और संग्रहण के योग्य हो जाती है। हालाँकि, यदि मेमोरी का प्रबंधन गलत हो तो स्वचालित GC पर निर्भरता समस्याएँ पैदा कर सकती है।

  • मार्क-एंड-स्वीप: जीसी रूट (वैश्विक निष्पादन संदर्भ) से शुरू होने वाली पहुंच योग्य वस्तुओं को चिह्नित करता है, और किसी भी अचिह्नित वस्तुओं को कचरा माना जाता है।

  • पीढ़ीगत कचरा संग्रह: कई जावास्क्रिप्ट इंजन (जैसे वी8) जेनरेशनल जीसी का उपयोग करते हैं, जहां मेमोरी को "युवा" और "पुरानी" पीढ़ियों में विभाजित किया जाता है। युवा पीढ़ी अधिक बार संग्रह करती है, जबकि पुरानी पीढ़ी लंबे समय तक जीवित रहने वाली वस्तुओं को संभालती है।

मेमोरी लीक से बचना
स्वचालित जीसी के साथ भी, यदि वस्तुओं के संदर्भ अनजाने में बनाए रखे जाते हैं तो मेमोरी लीक हो सकती है। सामान्य कारणों में शामिल हैं:

  • अनजाने में वैश्विक चर: Let, const, या var का उपयोग न करने से वैश्विक चर बन सकते हैं, जिससे उन्हें कचरा एकत्र होने से रोका जा सकता है।
function leak() {
  myGlobalVar = 'I am global';
}
  • क्लोजर: अनुचित तरीके से उपयोग किए गए क्लोजर बाहरी चर के संदर्भ को आवश्यकता से अधिक लंबे समय तक बनाए रख सकते हैं।
function outer() {
  let largeObject = { /* some data */ };
  return function inner() {
    console.log(largeObject);
  };
}
  • इवेंट श्रोता: DOM तत्वों से जुड़े इवेंट श्रोताओं को हटाना भूल जाने पर तत्व को DOM से हटाए जाने के बाद भी मेमोरी आवंटित रखी जा सकती है।
const element = document.getElementById('myButton');
element.addEventListener('click', () => console.log('Clicked'));
// Be sure to remove listeners when not needed
  • अलग किए गए DOM नोड्स: यदि DOM नोड्स हटा दिए गए हैं लेकिन फिर भी कोड में कहीं और संदर्भित किया गया है, तो मेमोरी जारी नहीं की जाएगी।
const element = document.getElementById('myElement');
document.body.removeChild(element);

मेमोरी अनुकूलन के लिए उन्नत तकनीकें

1.मैनुअल मेमोरी प्रोफाइलिंग: मेमोरी उपयोग को प्रोफाइल करने और लीक या अनावश्यक रूप से बनी रहने वाली वस्तुओं का पता लगाने के लिए ब्राउज़र डेवलपर टूल का उपयोग करें।

  • क्रोम डेवटूल्स: हीप स्नैपशॉट के लिए मेमोरी टैब।

  • फ़ायरफ़ॉक्स: मेमोरी लीक के लिए प्रदर्शन उपकरण।

2.वीकमैप्स और वीकसेट्स: जब आप कचरा संग्रहण को रोके बिना वस्तुओं को संग्रहीत करना चाहते हैं, तो वीकमैप्स या वीकसेट का उपयोग करें। जब वस्तुओं का कोई अन्य संदर्भ न हो तो ये संरचनाएँ स्वचालित GC की अनुमति देती हैं।

let wm = new WeakMap();
let obj = {};
wm.set(obj, 'someValue');
obj = null; // 'obj' is now eligible for GC.

3.लूप्स और रिकर्सन को अनुकूलित करना: टेल-कॉल ऑप्टिमाइज़ेशन या पुनरावृत्त तरीकों का उपयोग करके पुनरावर्ती कार्यों में अनावश्यक मेमोरी खपत से बचें। इसके अलावा, बड़े लूप या ऐरे ऑपरेशंस से सावधान रहें जो मेमोरी स्पाइक्स का कारण बन सकते हैं।

4.डिफ़र और आलसी लोडिंग: अनावश्यक मेमोरी खपत को रोकते हुए, उन स्क्रिप्ट और संपत्तियों को लोड करके या आलसी करके मेमोरी उपयोग को अनुकूलित करें जिनकी तुरंत आवश्यकता नहीं है।

निष्कर्ष:

हालांकि जावास्क्रिप्ट का कचरा संग्रहकर्ता भारी भार उठाने का काम संभालता है, लेकिन मेमोरी को कैसे आवंटित और जारी किया जाता है, इसका ध्यान रखने से प्रदर्शन में सुधार हो सकता है, खासकर जटिल या लंबे समय तक चलने वाले अनुप्रयोगों में। इन मेमोरी प्रबंधन रणनीतियों को लागू करके, आप यह सुनिश्चित करेंगे कि आपके ऐप्स बड़े पैमाने पर प्रदर्शनशील बने रहें।


पढ़ने के लिए धन्यवाद! बेझिझक अपने विचार या अपनी परियोजनाओं में उपयोग की जाने वाली कोई उन्नत मेमोरी प्रबंधन युक्तियाँ साझा करें।??
मेरी वेबसाइट पर जाएँ:https://shafayet.zya.me


आपके लिए एक मीम?

JavaScript Memory Management and Garbage Collection

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/shafayeat/javascript-memory-management-and-garbage-collection-2a?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए [email protected] से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3