परिपत्र संदर्भ
एक वृत्ताकार संदर्भ तब बनता है जब दो चर एक-दूसरे को संदर्भित करते हैं और प्रत्येक वस्तु को 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>