javascript / expert
Snippet
Objekt-Pooling zur Reduzierung der Garbage Collection
In Node.js-Anwendungen mit hohem Durchsatz führt die häufige Erstellung von Objekten zu exzessiven Garbage Collection (GC) Pausen. Objekt-Pooling verwendet existierende Objekte wieder, was den Speicher-Churn massiv reduziert und die Performance in Systemen wie Game-Engines oder Echtzeit-Datenverarbeitern steigert.
snippet.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class ObjectPool {constructor(factory, size = 10) {this.factory = factory;this.pool = Array.from({ length: size }, () => this.factory());}acquire() {return this.pool.length > 0 ? this.pool.pop() : this.factory();}release(obj) {Object.keys(obj).forEach(key => obj[key] = null);this.pool.push(obj);}}const particlePool = new ObjectPool(() => ({ x: 0, y: 0, active: true }));const p = particlePool.acquire();particlePool.release(p);
nodejs
Erklärung
1
this.pool = Array.from({ length: size }, () => this.factory());
Präalloziiert eine feste Anzahl von Objekten im Speicher, um initiale Allokationsspitzen zu vermeiden.
2
return this.pool.length > 0 ? this.pool.pop() : this.factory();
Gibt ein ungenutztes Objekt aus dem Stack zurück oder erstellt ein neues, falls der Pool leer ist.
3
Object.keys(obj).forEach(key => obj[key] = null);
Bereinigt den Objektzustand vor der Rückgabe in den Pool, um Memory Leaks oder Zustandsverschmutzung zu verhindern.