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

जावास्क्रिप्ट में मार्क एंड स्वीप एल्गोरिथम के बारे में विस्तार से बताएं?

<घंटा/>

मार्क एंड स्वीप एल्गोरिथम

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

यह एल्गोरिथम वास्तव में 3 महत्वपूर्ण चरणों से होकर गुजरता है।

  • रूट:सामान्य तौर पर, रूट एक ग्लोबल वेरिएबल होता है जिसका इस्तेमाल कोड में किया जाता है। जावास्क्रिप्ट में एक विंडो ऑब्जेक्ट रूट के रूप में कार्य कर सकता है। यह एल्गोरिथम वैश्विक ऑब्जेक्ट रूट का उपयोग यह पता लगाने के लिए करता है कि ऑब्जेक्ट पहुंच योग्य हैं या नहीं।
  • यह एल्गोरिथम तब हर रूट और उनके बच्चों की निगरानी करता है। निगरानी करते समय, कुछ वस्तुएं जो पहुंच योग्य हैं उन्हें चिह्नित किया जाता है और शेष वस्तुएं जो पहुंच योग्य नहीं हैं, प्रदान की गई शर्तों के आधार पर अचिह्नित कर दी जाती हैं।
  • जो वस्तुएं अचिह्नित हैं, अर्थात जो पहुंच से बाहर हैं, उन्हें कचरा एकत्र किया जाएगा।

चरण चिह्नित करें

मार्क फेज में हम यह पता लगाने में सक्षम हो सकते हैं कि कौन से तत्व चिह्नित हैं और कौन से अचिह्नित हैं। आइए मान लें कि दिए गए उदाहरण -1 में दिखाए गए अनुसार ऑब्जेक्ट 'obj1' को एक संपत्ति 'हैलो' असाइन करें। इस एल्गोरिदम द्वारा उपयोग की जाने वाली जड़, वैश्विक वस्तु, obj1 और इसकी संपत्ति 'हैलो' तक पहुंच सकती है। तो इसे अभी चिह्नित किया गया है।

उदाहरण-1

var obj1 = {
pro1: "hello" // marked because it can be reached by root.
}

मान लीजिए कि इस वस्तु को एक शून्य मान दिया गया है जैसा कि उदाहरण -2 में दिखाया गया है। फिर नए असाइन किए गए 'नल' को चिह्नित किया जाएगा और पहले से असाइन किए गए 'संपत्ति हैलो' को अचिह्नित किया जाएगा। तो मार्क चरण के अंत में हम यह निष्कर्ष निकाल सकते हैं कि 'नल' के साथ असाइन की गई ऑब्जेक्ट को चिह्नित किया गया है और 'प्रॉपर्टी हैलो' के साथ असाइन की गई ऑब्जेक्ट को अचिह्नित किया गया है।

उदाहरण-2

obj1 = null // null will be marked(reachable) and hello will be unmarked(unreachable)

स्वीप चरण

जैसा कि नाम से पता चलता है कि यह अगम्य वस्तुओं को 'स्वीप' करता है। मार्क चरण में हमने देखा है कि "प्रॉपर्टी हैलो" वाली वस्तु अचिह्नित हो गई, जिससे यह पहुंच से बाहर हो गई। चूंकि अगम्य वस्तुओं को कचरा एकत्र किया जाएगा, इस चरण में 'संपत्ति हैलो' वाली वस्तु कचरा एकत्र किया जाएगा।

मार्क एंड स्वीप एल्गोरिथम को ट्रेसिंग कचरा कलेक्टर भी कहा जाता है क्योंकि यह उन वस्तुओं के पूरे संग्रह का पता लगाता है जो प्रोग्राम द्वारा प्रत्यक्ष या परोक्ष रूप से सुलभ हैं।

साइकिल अब कोई समस्या नहीं हैं

निम्नलिखित उदाहरण में, जब फ़ंक्शन कॉल वापस आती है, तो दो ऑब्जेक्ट्स obj1 और obj2 को किसी ऐसी चीज़ से संदर्भित नहीं किया जाता है जो कचरा संग्रह के लिए योग्य है। तो कचरा संग्रहकर्ता वस्तुओं की स्मृति को obj1 और obj2 मुक्त कर देगा।

उदाहरण

function f() {
   var obj1 = {};
   var obj2 = {};
   obj1.p = obj2; // obj1 references obj2
   obj2.p = obj1; // obj2 references obj1. This creates a cycle.
}
f();

सीमाएं

कुछ क्षण ऐसे होते हैं जब मैन्युअल रूप से यह तय करना बहुत सुविधाजनक होता है कि कब और कौन सी मेमोरी जारी की जाए। वस्तु की स्मृति को मुक्त करने के लिए, इसे स्पष्ट रूप से अगम्य बनाना होगा। जावास्क्रिप्ट में कचरा संग्रहण को स्पष्ट रूप से ट्रिगर करने की यह प्रक्रिया अभी संभव नहीं है।


  1. जावास्क्रिप्ट में इंपोर्ट "as" और एक्सपोर्ट "as" कंस्ट्रक्शन की व्याख्या करें।

    आयात करें जैसा कि हमें अलग नाम के तहत एक नामित मॉड्यूल आयात करने की अनुमति देता है। निर्यात के रूप में हमें अलग नाम के तहत एक नामित मॉड्यूल निर्यात करने की अनुमति देता है। जावास्क्रिप्ट में निर्माण के रूप में आयात और निर्यात के लिए कोड निम्नलिखित है - उदाहरण दस्तावेज़ बॉडी { फॉन्ट-फ़ैमिली:सेगो यूआ

  1. कैसे जावास्क्रिप्ट में उप वस्तुओं और सरणियों के साथ एक वस्तु आयात करने के लिए?

    जावास्क्रिप्ट में उप-ऑब्जेक्ट्स और सरणियों के साथ किसी ऑब्जेक्ट को आयात करने के लिए कोड निम्नलिखित है - उदाहरण दस्तावेज़ बॉडी { फॉन्ट-फ़ैमिली:सेगो यूआई, ताहोमा, जिनेवा, वर्दाना, सेन्स-सेरिफ़; } .result{ फ़ॉन्ट-आकार:18पीएक्स; फ़ॉन्ट-वजन:500; }उप-वस्तुओं और सरणियों के साथ किसी वस्तु को आयात करना चलो s

  1. जावास्क्रिप्ट में वस्तुओं की समानता की व्याख्या करें।

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