การอ้างอิงแบบวงกลม
การอ้างอิงแบบวงกลมจะเกิดขึ้นเมื่อมีตัวแปรสองตัวที่อ้างอิงถึงกันโดยให้แต่ละอ็อบเจ็กต์มีการอ้างอิงถึง 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>