0 Tage Serie
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
javascript
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.