Skip to main content

WeakMap and WeakSet: The Guardians Against Memory Leaks

Two objects which have weak and strong reference.
Last updated: August 16, 2024

#Understanding JavaScript Memory Management and Weak Data Structures

JavaScript is a high-level language, which means it takes care of memory management for you, making development much easier compared to languages like C++ and C.

JavaScript handles memory with the help of a Garbage Collector. This is a mechanism that automatically cleans up and deletes objects that are no longer needed, freeing up memory.

You might wonder, what does it mean when we say an object “doesn’t have any references”? Simply put, it means the object isn’t being used anywhere in your program. When this happens, the Garbage Collector steps in to clean it up and prevent memory leaks.

So, we’ve established that JavaScript uses a Garbage Collector to keep things tidy by removing unused objects.

#WeakSet and WeakMap

Now, let’s talk about WeakSet and WeakMap.

In JavaScript, when you add an object to a data structure like an array, that data structure creates a reference to the object. This means the object is still considered “in use” even if it’s not used anywhere else in your program.

For example, if you create an object called person and only use it inside an array, the Garbage Collector won’t remove it because the array is still referencing it. This same rule applies to Map and Set.

// code...
const person = {
name: "Ahmed",
age: 10,
};
const arrayOfPersons = [person];
// code...

But here’s where WeakMap and WeakSet come in. These special data structures work a bit differently. They don’t create strong references to their objects, so if the object is only used inside a WeakMap or WeakSet, the Garbage Collector can still clean it up.

Because of this, WeakSet and WeakMap have some key differences from regular Set and Map.

// code...
const person = {
name: "Ahmed",
age: 10,
};
const weakSetOfPersons = new WeakSet(person);
// code...

#Key Differences

I hope this makes things a bit clearer and friendlier!