javascript / expert
Snippet
WeakRef-Ressourcenlebenszyklus-Tracking und Garbage-Collection-Bereinigung
Dieses Beispiel demonstriert fortgeschrittenes Speicher-Management in Node.js unter Verwendung von FinalizationRegistry und WeakRef. FinalizationRegistry ermöglicht die Registrierung eines Cleanup-Callbacks, der asynchron ausgeführt wird, nachdem eine Objektreferenz vom Garbage Collector freigegeben wurde, während WeakRef eine schwache Referenz auf ein Objekt hält, ohne dessen GC-Bereinigung zu verhindern.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import { FinalizationRegistry } from 'node:v8';class ManagedResource {#registry = new FinalizationRegistry((heldValue) => {console.log(`Resource ${heldValue.id} was garbage collected. Cleaning up native handle ${heldValue.handle}`);});register(target, metadata) {this.#registry.register(target, metadata, target);}unregister(target) {this.#registry.unregister(target);}}const manager = new ManagedResource();let session = { id: 'sess_102', handle: 0xDEADBEEF };manager.register(session, { id: session.id, handle: session.handle });const weakSession = new WeakRef(session);session = null;
nodejs
Erklärung
1
import { FinalizationRegistry } from 'node:v8';
Importiert das FinalizationRegistry-Werkzeug aus dem V8-Modul zur Überwachung der Speicherfreigabe.
2
#registry = new FinalizationRegistry((heldValue) => {
Instanziiert ein privates Klassenfeld mit einem Registry-Callback, der Metadaten erhält, sobald das Zielobjekt bereinigt wird.
3
this.#registry.register(target, metadata, target);
Registriert das Zielobjekt mit Bereinigungs-Metadaten und verwendet das Objekt selbst als Unregister-Token.
4
const weakSession = new WeakRef(session);
Erstellt eine WeakRef zur Überwachung der Objektverfügbarkeit ohne eine starke Speicherreferenz zu erzwingen.
5
session = null;
Löscht die starke Referenz, um dem V8 Garbage Collector die Freigabe des Session-Objekts zu ermöglichen.