Start · Sprachen · JavaScript · Referenz · new GPUOutOfMemoryError()

new GPUOutOfMemoryError()

Methode

Erzeugt eine neue <code>GPUOutOfMemoryError</code>-Instanz, die in WebGPU signalisiert, dass für eine Operation nicht genug GPU-Speicher vorhanden war.

seit JavaScript WebGPU – Chrome/Edge 113+, Safari 26+, Firefox 141 Kategorie: webapi

Signatur

new GPUOutOfMemoryError(message)

Beschreibung

Der Konstruktor GPUOutOfMemoryError() erzeugt ein Fehlerobjekt vom Typ GPUOutOfMemoryError. Diese Klasse erbt von GPUError und zeigt an, dass die GPU eine Speicheranforderung nicht erfüllen konnte, etwa beim Anlegen einer sehr großen Textur oder eines großen Puffers mit device.createTexture() bzw. device.createBuffer().

In der Praxis erzeugst du solche Objekte selten selbst. Die WebGPU-Implementierung liefert sie, wenn du einen Fehlerbereich mit device.pushErrorScope("out-of-memory") öffnest und das Promise von device.popErrorScope() ausgewertet wird. Fehler, die kein Fehlerbereich abfängt, kommen über das Ereignis uncapturederror am GPUDevice an.

Selbst aufrufen lohnt sich vor allem in Tests, Mocks und Polyfills. Damit kannst du prüfen, ob deine Anwendung auf Speichermangel richtig reagiert, zum Beispiel mit kleineren Texturen oder einer geringeren Auflösung, ohne den Speicher der GPU wirklich aufbrauchen zu müssen.

Parameter

Name Typ Default Beschreibung
$message Pflicht string Lesbare Beschreibung des Fehlers. Sie steht danach in der Eigenschaft message (geerbt von GPUError).

Rückgabewert

Typ
GPUOutOfMemoryError
Beschreibung
Eine neue GPUOutOfMemoryError-Instanz, deren message den übergebenen Text enthält.

Beispiele

Instanz direkt erzeugen (z. B. für Tests)

const err = new GPUOutOfMemoryError("Textur 16384x16384 konnte nicht alloziert werden");

console.log(err instanceof GPUOutOfMemoryError); // true
console.log(err instanceof GPUError);           // true
console.log(err.message);
true true Textur 16384x16384 konnte nicht alloziert werden

Speichermangel mit einem Fehlerbereich abfangen und auf eine kleinere Textur ausweichen

const createTextureSafe = async (device, size) => {
  device.pushErrorScope("out-of-memory");
  const texture = device.createTexture({
    size: [size, size],
    format: "rgba8unorm",
    usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST,
  });
  const error = await device.popErrorScope();

  if (error instanceof GPUOutOfMemoryError) {
    console.warn(`Kein Speicher für ${size}px: ${error.message}`);
    texture.destroy();
    return size > 512 ? createTextureSafe(device, size / 2) : null;
  }
  return texture;
};

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const tex = await createTextureSafe(device, 8192);
console.log(tex ? `Textur: ${tex.width}px` : "Keine Textur möglich");
Textur: 8192px

Fehlerbehandlung mit einem simulierten Fehler testen

const handleGpuError = (error) => {
  if (error instanceof GPUOutOfMemoryError) return "Qualität reduzieren";
  if (error instanceof GPUValidationError) return "Programmierfehler melden";
  return "Unbekannter Fehler";
};

// Test ohne echte Speicherknappheit
console.log(handleGpuError(new GPUOutOfMemoryError("simuliert")));
console.log(handleGpuError(new GPUValidationError("simuliert")));
Qualität reduzieren Programmierfehler melden

// Wichtig · Fallstricke

  • Kein JavaScript-Error: GPUOutOfMemoryError erbt nicht von Error. Das Objekt hat daher keinen stack, und instanceof Error ergibt false. WebGPU wirft solche Fehler nicht, sondern liefert sie über popErrorScope() oder das Ereignis uncapturederror. Ein try…catch um createBuffer() fängt sie also nicht ab.
  • Der Parameter message ist Pflicht: Ruft man den Konstruktor ohne Argument auf, erzeugt der Browser je nach Implementierung einen TypeError oder setzt eine leere Nachricht.
  • Das Objekt bleibt nutzbar: Nach einem Speicherfehler ist das zurückgegebene Objekt, etwa ein Puffer, zwar vorhanden, aber ungültig. Gib es mit destroy() frei und versuche es mit kleineren Ressourcen erneut.
  • Browser-Unterstützung: WebGPU steht nur in sicheren Kontexten (HTTPS) zur Verfügung und noch nicht auf allen Plattformen. Prüfe vorher mit if ("gpu" in navigator), ob die API da ist. Existiert GPUOutOfMemoryError nicht, führt schon der Zugriff darauf zu einem ReferenceError.
  • Kein verlässlicher Speicherwert: Die Meldungen sind je nach Implementierung verschieden und nicht genormt. Werte message nicht maschinell aus, sondern unterscheide Fehler anhand ihrer Klasse.