การอ้างอิงแบบวงกลม
การอ้างอิงแบบวงกลมจะเกิดขึ้นเมื่อมีตัวแปรสองตัวที่อ้างอิงถึงกันโดยให้แต่ละอ็อบเจ็กต์มีการอ้างอิงถึง 1. ในระบบที่รวบรวมขยะมูลฝอย การอ้างอิงแบบวงกลมอาจไม่มีปัญหาเมื่อตัวแปรที่เกี่ยวข้องไม่มีการอ้างอิง ในสถานการณ์นั้น ตัวแปรที่ประกาศจะถูกรวบรวมเป็นขยะ ในระบบการนับอ้างอิง วัตถุจะไม่ถูกทำลายเพราะจำนวนอ้างอิงไม่สามารถเป็นศูนย์ได้
ในระบบไฮบริด ซึ่งใช้การนับอ้างอิงและการรวบรวมขยะ หน่วยความจำรั่วจะเกิดขึ้นเนื่องจากระบบไม่สามารถระบุการอ้างอิงแบบวงกลมได้
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงการอ้างอิงแบบวงกลมระหว่างวัตถุ javascript และวัตถุ DOM วัตถุ javascript มีการอ้างถึงวัตถุ DOM (Div) และวัตถุ Dom (Div) ผ่านคุณสมบัติ "ขยาย" มีการอ้างอิงถึงวัตถุ javascript (obj) เนื่องจากวัตถุทั้งสองมีการอ้างอิงถึงกัน จึงไม่มีใครสามารถทำลายได้โดยการทำให้หน่วยความจำรั่ว
<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> หลีกเลี่ยงหน่วยความจำรั่ว
ในตัวอย่างต่อไปนี้ในขั้นต้น ทั้งวัตถุจาวาสคริปต์และวัตถุ DOM อยู่ในการอ้างอิงแบบวงกลม แต่เมื่อกำหนด null ให้กับวัตถุจาวาสคริปต์ ทั้งวัตถุ (วัตถุจาวาสคริปต์และ DOM) จะมีปัญหาในการหาว่าใครกำลังอ้างอิงนั่นคือวัตถุจาวาสคริปต์กำลังอ้างอิงหรือไม่ null หรือวัตถุ DOM ที่นั่นโดยการทำลายการอ้างอิงแบบวงกลม
ตัวอย่าง
<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>