An Introduction to FinalizationRegistry
In JavaScript, whenever we deal with resources, it is possible that resource management may turn into a challenge. The JavaScript language has an accompanying garbage collection mechanism, but sometimes there is a need for a more complex pattern for resource management. One of these tools is the FinalizationRegistry that can assist in managing resources that are subject to garbage collection.
We can consider FinalizationRegistry as an observer for garbage collection. This way, you can allow the executed operations regarding the resources that are being collected to be defined. However, this should not be done with operations that are in real-time, as there are no temporal guarantees in this method.
Introduction to FinalizationRegistry
FinalizationRegistry includes a method called register
. This method allows you to specify a callback that should execute when the garbage collection occurs on a specific object. This action enables a greater resource management capability to be available to developers.
When we think about resource collection, often in our minds, there is an idea that there will be a considerable time for garbage collection, however, FinalizationRegistry allows us to define triggers for the collection of resources.
For example, in scenarios where we need connections that are no longer being used or resources that have been instantiated, they can be freed, and we can use this feature. This tool is highly powerful, especially in scenarios that require higher efficiency from our resources.
An Example of Using FinalizationRegistry
const registry = new FinalizationRegistry((heldValue) => {
console.log('Object finalized:', heldValue);
});
let myObj = {some: 'data'};
registry.register(myObj, 'myObject resource');
myObj = null; // Now eligible for garbage collection
Code Snippet Example
const registry = new FinalizationRegistry((heldValue) => {...})
A snippet of
FinalizationRegistry
can be created that its callback is executed when a specific object is finalized.let myObj = {some: 'data'}
A variable named
myObj
is defined.registry.register(myObj, 'myObject resource')
This line registers
myObj
in FinalizationRegistry
and attaches information for identifying its resource.myObj = null;
By assigning
myObj
to null
, it becomes eligible for garbage collection.