ES2021 introduced two new functionalities to achieve the following things

  • How to create a weak reference to objects

  • How to run a callback before an object is a garbage collected?

    The above things can be achieved with the below classes introduced in ES2021

    • WeakRef class
    • FinalizationRegistry

WeakRef class in javascript

It is a weak reference to another object without the object being garbage collected. another object is called a target object.

In javascript, There are two types of object references.

Weak object reference Strong object reference

In javascript, Whenever you create an object assigned with a variable, It creates a memory, and the variable holds the address of a memory location.

Declare an object and assign the reference

const strongReference = { name:"john",id:1
         };

strongRef variable a reference an employee object. This object will not garbage collect as long as strongRef is pointed.

WeakRef are

    const weakReference = new WeakRef(
        { name:"john",id:1 
        });

A created weak reference to an employee object

During garbage collection running, if there is a weak reference to a target object, the javascript engine safely removes a target object from memory space is freed.

This will be useful during WebSocket communication with short time execution.

Get a target object from Weakref object in javascript

WeakRef class has deref() method which returns the target object of a class.

WeakRef in javascript features

  • WeakMap and WeakMap are inbuilt javascript weak reference objects
  • Helps to free the space during running garbage collection
  • deref used to get a target object weak reference
  • Target object is not updated Once weakref is created with the target object. else undefined can be set
  • It is always suggestible to avoid weakref object if possible

Support in browsers

Please check weakref browser support for browser version support

FinalizationRegistry class in javascript example

FinalizationRegistry is a class to create an object which runs before garbage collection runs

It is a call back executes when an object is eligible for garbage collection.

Let’s create a call back

let callbackGc=new FinalizationRegistry((value) => {
  console.log("called before GC");
});

Let’s create an object which is eligible for garbage collection

let myobject={};

callbackGc.register(myobject,"valuepassed")

when myobject is garbage collected, It runs the callback and prints its value.