【Node.js24.x】FinalizationRegistry::FinalizationRegistry()関数の使い方
FinalizationRegistry関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
FinalizationRegistry関数は、JavaScriptのメモリ管理機能であるガベージコレクタが、特定のオブジェクトをメモリから解放する直前に、あらかじめ登録しておいた処理(ファイナライザ)を実行するためのインスタンスを作成する関数です。
この機能は、ファイルハンドルやネットワーク接続、データベース接続といったプログラム外の貴重なリソースを管理する上で非常に役立ちます。例えば、JavaScriptオブジェクトがこれらの外部リソースへの参照を保持している場合、そのJavaScriptオブジェクトが不要になった際に、ガベージコレクタがそれを回収するタイミングで、関連する外部リソースも確実に解放する必要があります。FinalizationRegistryを用いることで、このクリーンアップ処理を自動化し、リソースリークを防ぐことが可能になります。
FinalizationRegistryのインスタンスを生成する際には、オブジェクトが回収されたときに実行されるコールバック関数を引数として渡します。そして、生成されたインスタンスのregisterメソッドを使って、監視したいオブジェクトと、そのオブジェクトが回収された際にコールバック関数に渡される任意の値を登録します。ガベージコレクタの動作タイミングは保証されないため、厳密な即時性が必要なリソース解放には適しませんが、間接的なリソース管理メカニズムとして、複雑なアプリケーションにおけるメモリとリソースの健全性を保つために利用されます。
構文(syntax)
1const registry = new FinalizationRegistry((heldValue) => { 2 // heldValueは、オブジェクトがガベージコレクションされたときにコールバックに渡される値です。 3 console.log(`Finalized resource associated with: ${heldValue}`); 4}); 5 6let watchedObject = {}; 7 8registry.register(watchedObject, 'unique_resource_id'); 9 10// watchedObjectへの参照を解除すると、やがてガベージコレクションの対象となります。 11watchedObject = null;
引数(parameters)
cleanupCallback
- cleanupCallback: callable: ファイナライズが発生した際に呼び出されるコールバック関数。 この関数は、ターゲットオブジェクトと、そのターゲットオブジェクトに登録されている値(追加の値)を引数として受け取ります。
戻り値(return)
FinalizationRegistry
FinalizationRegistryクラスの新しいインスタンスを生成します。このインスタンスは、ガベージコレクションされるオブジェクトを監視し、特定の処理を実行するために使用されます。