
- Javascript Basics Tutorial
- Javascript - Home
- Javascript - Overview
- Javascript - Syntax
- Javascript - Enabling
- Javascript - Placement
- Javascript - Variables
- Javascript - Operators
- Javascript - If...Else
- Javascript - Switch Case
- Javascript - While Loop
- Javascript - For Loop
- Javascript - For...in
- Javascript - Loop Control
- Javascript - Functions
- Javascript - Events
- Javascript - Cookies
- Javascript - Page Redirect
- Javascript - Dialog Boxes
- Javascript - Void Keyword
- Javascript - Page Printing
- JavaScript Objects
- Javascript - Objects
- Javascript - Number
- Javascript - Boolean
- Javascript - Strings
- Javascript - Arrays
- Javascript - Date
- Javascript - Math
- Javascript - RegExp
- Javascript - HTML DOM
- JavaScript Advanced
- Javascript - Error Handling
- Javascript - Validations
- Javascript - Animation
- Javascript - Multimedia
- Javascript - Debugging
- Javascript - Image Map
- Javascript - Browsers
- JavaScript Useful Resources
- Javascript - Questions And Answers
- Javascript - Quick Guide
- Javascript - Functions
- Javascript - Resources
How can circular references cause memory leakage in JavaScript?
Circular reference
A circular reference is formed when two variables reference to each other there by giving each object a reference count of 1.In pure garbage collected system, a circular reference may not be a problem when the variables involved were have no references.In that scenario the declared variables will be garbage collected.In reference counting system neither of the objects will be destroyed,because the reference count cannot be zero.
In hybrid system, where reference counting and garbage collection are used, memory leaks will occur because the system fails to identify circular references.
Example
The following example shows a circular reference between javascript object and DOM object.The javascript object has a reference to DOM object(Div) and Dom object(Div), through "expando" property, has a reference to javascript object(obj). Since both objects were referenced to each other none can be destroyed there by causing memory leak.
<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>
Avoiding memory leak
In the following example initially both javascript object and DOM object are in circular reference but when null is assigned to javascript object both the objects(javascript and DOM objects) will be in dilemma to figure out whom they are referencing that is whether javascript object is referencing null or the DOM object there by breaking circular reference.
Example
<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>
- Related Articles
- How can Detached DOM elements cause memory leak in JavaScript?
- How can Forgotten timers or callbacks cause memory leaks in JavaScript?
- Circular References in Perl
- How to avoid memory leakage in SAP B1 DI API
- How can closures cause memory leak and how to prevent it?
- What are circular references in C#?
- How to allocate memory in Javascript?
- How are variables allocated memory in JavaScript?
- Can Stress Cause Hives?
- Memory Management in JavaScript
- How to free up the memory in JavaScript?
- Can a microwave cause cancer?
- Eradicating Memory Leaks in Javascript
- How to clear cache memory using JavaScript?
- How to avoid circular reference in OOP Javascript?
