Node.js allocates memory as needed, uses it, then the garbage collector frees unused memory automatically to keep the app efficient.
Execution Sample
Node.js
let data = [];
for(let i=0; i<3; i++) {
data.push({id: i});
}
// data used
// then data = null to free
This code creates an array with objects, then later clears the reference to allow memory to be freed.
Execution Table
Step
Action
Memory State
Garbage Collector Activity
Notes
1
Start app and allocate empty array
Empty array allocated
No GC activity
Memory reserved for array
2
Add object {id:0} to array
Array holds 1 object
No GC activity
Memory used for object
3
Add object {id:1} to array
Array holds 2 objects
No GC activity
Memory used for object
4
Add object {id:2} to array
Array holds 3 objects
No GC activity
Memory used for object
5
Use data array
Array with 3 objects in use
No GC activity
Objects are reachable
6
Set data = null
No references to array or objects
GC marks array and objects as unreachable
Memory ready to be freed
7
Garbage collector frees memory
Memory freed
GC frees unreachable objects
Memory returned to system
8
App continues or exits
Memory stable
No GC activity
Clean memory state
💡 Execution stops as memory is freed after data is set to null and GC runs
Variable Tracker
Variable
Start
After Step 2
After Step 3
After Step 4
After Step 6
Final
data
Empty array
Array with 1 object
Array with 2 objects
Array with 3 objects
null
null
Key Moments - 3 Insights
Why do we set 'data = null' after using the array?
Setting 'data = null' removes the reference to the array and its objects, making them unreachable so the garbage collector can free that memory, as shown in step 6 and 7 of the execution table.
Does Node.js immediately free memory when variables go out of scope?
No, Node.js uses a garbage collector that runs periodically to free memory of unreachable objects, not immediately when variables go out of scope, as seen between steps 6 and 7.
What happens if we keep references to large objects accidentally?
If references remain, the garbage collector cannot free that memory, causing memory to grow unnecessarily, which can lead to slow performance or crashes.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the state of 'data' after step 4?
AArray with 3 objects
Bnull
CEmpty array
DUndefined
💡 Hint
Check the 'Memory State' column at step 4 in the execution table.
At which step does the garbage collector mark objects as unreachable?
AStep 5
BStep 6
CStep 3
DStep 2
💡 Hint
Look for 'GC marks array and objects as unreachable' in the 'Garbage Collector Activity' column.
If we never set 'data = null', what would happen to memory?
AGarbage collector would free memory anyway
BMemory would be freed immediately
CMemory would stay allocated because references remain
DMemory would be doubled
💡 Hint
Refer to the key moment about keeping references and GC behavior.
Concept Snapshot
Node.js memory is managed automatically by garbage collection.
Keep references only while needed.
Set variables to null to release memory.
Garbage collector frees unreachable objects periodically.
Avoid memory leaks by removing unused references.
Monitor memory usage for healthy apps.
Full Transcript
This visual trace shows how Node.js manages memory. The app starts and allocates an empty array. Objects are added step by step, increasing memory use. When the array is no longer needed, setting the variable to null removes references. The garbage collector then marks these objects as unreachable and frees their memory. This process helps keep the app efficient by cleaning unused memory. Key points include manually clearing references to help GC and understanding that GC runs periodically, not instantly. Avoid keeping unused references to prevent memory leaks.