Created
August 11, 2012 21:47
-
-
Save nicholasbs/3327493 to your computer and use it in GitHub Desktop.
A (very) quick introduction to garbage collection
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// When you create a new object | |
var obj = {data: "some data here"}; | |
/* The JavaScript runtime environment allocates memory for you. | |
__________________________ | |
Your computer's memory ----> || Location || Value || | |
||------------------------|| | |
It has to store that obj is || 0 || 2424 || | |
an object, that it has a || 1 || 1002 || | |
property named data, and || 2 || 327871 || | |
data is the string || 3 || 0 || | |
"some data here" || ... || ... || | |
-------------------------- | |
*/ | |
obj = null; // What happens when there's no way to access this object again? | |
/* If the JavaScript runtime did nothing, all your memory would eventually be used to store | |
data you don't need any more. | |
Garbage collection is the process of cleaning up data like this that's no longer useful. | |
The simplest way to do this is to store a flag on every memory location: | |
_________________________________________ | |
Your computer's memory ----> || Location || Value || Still used? || | |
||------------------------||--------------|| | |
|| 0 || 2424 || yes || | |
|| 1 || 1002 || yes || | |
|| 2 || 327871 || no || | |
|| 3 || 0 || yes || | |
|| ... || ... || ... || | |
------------------------------------------ | |
Here's one simple algorithm for garbage collection: | |
1. Mark all memory as not used. | |
2. Take everything in the current scope and mark it as used. | |
3. Recursively mark anything referenced by those objects as used. | |
4. Go through all memory and reclaim anything that's marked as not used. | |
*/ | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment