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

वृत्ताकार संदर्भ जावास्क्रिप्ट में स्मृति रिसाव का कारण कैसे बन सकते हैं?

<घंटा/>

परिपत्र संदर्भ

एक वृत्ताकार संदर्भ तब बनता है जब दो चर एक-दूसरे को संदर्भित करते हैं और प्रत्येक वस्तु को 1 की संदर्भ संख्या देते हैं। घोषित चर कचरा एकत्र किया जाएगा। संदर्भ गणना प्रणाली में कोई भी वस्तु नष्ट नहीं होगी, क्योंकि संदर्भ गणना शून्य नहीं हो सकती है।

हाइब्रिड सिस्टम में, जहां रेफरेंस काउंटिंग और गारबेज कलेक्शन का उपयोग किया जाता है, मेमोरी लीक हो जाएगी क्योंकि सिस्टम सर्कुलर रेफरेंस की पहचान करने में विफल रहता है।

उदाहरण

निम्नलिखित उदाहरण जावास्क्रिप्ट ऑब्जेक्ट और डीओएम ऑब्जेक्ट के बीच एक गोलाकार संदर्भ दिखाता है। जावास्क्रिप्ट ऑब्जेक्ट में "विस्तार" संपत्ति के माध्यम से डीओएम ऑब्जेक्ट (डिव) और डोम ऑब्जेक्ट (डिव) का संदर्भ है, जावास्क्रिप्ट ऑब्जेक्ट (ओबीजे) का संदर्भ है। चूंकि दोनों वस्तुओं को एक दूसरे के संदर्भ में संदर्भित किया गया था, स्मृति रिसाव के कारण वहां कोई भी नष्ट नहीं किया जा सकता है।

<html>
<body>
<script>  
   window.onload = function(){
   var obj=document.getElementById("DivElement");
   document.getElementById("DivElement").expandoProperty=obj;
   obj.String=new Array(1000).join(new Array(2000);
   };
</script>
</body>
</html>

स्मृति रिसाव से बचना

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

उदाहरण

<html>
<body>
<script>  
   window.onload = function(){
   var obj=document.getElementById("DivElement");
   document.getElementById("DivElement").expandoProperty=obj;
   obj.String=new Array(1000).join(new Array(2000);
   obj = null        // this breaks circular reference
   };
</script>
</body>
</html>

  1. स्ट्रिंग को जावास्क्रिप्ट ऑब्जेक्ट में कैसे बदलें?

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

  1. जावास्क्रिप्ट में आयातित ऑब्जेक्ट को डी-स्ट्रक्चर कैसे करें?

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

  1. एक बहुआयामी जावास्क्रिप्ट ऑब्जेक्ट कैसे बनाएं?

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