Arbeitsspeicherverwaltung

Die Arbeitsspeicheroptimierung ist entscheidend für stabile und leistungsstarke Spielerlebnisse auf Android-Geräten. In diesem Leitfaden erfahren Sie, warum Arbeitsspeichereffizienz wichtig ist, wie das Android-Betriebssystem Arbeitsspeicherlimits für Prozesse verwaltet und erzwingt und welche neuen Grenzwerte in der Google Play Console verfügbar sind, mit denen Sie die technische Qualität Ihres Spiels überwachen und verbessern können.

Die Bedeutung der Arbeitsspeicheroptimierung

Die Optimierung des Arbeitsspeichers Ihres Spiels ist wichtig, um die Nutzerbindung aufrechtzuerhalten, die Gerätekompatibilität zu erweitern und die Qualitätsstandards der Plattform einzuhalten:

  • Verhinderung von Kaltstarts (Nutzererfahrung und ‑bindung): Wenn ein Spieler vorübergehend von Ihrem Spiel zu einer anderen App wechselt (z. B. um eine Benachrichtigung zu beantworten oder eine Nachricht zu lesen), wird der Spielprozess vom Betriebssystem in den Hintergrund verschoben. Wenn der Arbeitsspeicherbedarf des Spiels im Hintergrund zu hoch ist, beendet der Low Memory Killer (LMK) des Systems den Spielprozess vorrangig, um RAM für Vordergrundaufgaben freizugeben. Wenn der Nutzer das Spiel das nächste Mal fortsetzt, muss es einen langen Kaltstart durchlaufen, anstatt nahtlos und sofort fortgesetzt zu werden. Dabei werden umfangreiche Grafiken, Audio und Binärdateien der Game Engine vollständig aus dem Speicher neu geladen. Wenn Sie die Arbeitsspeichernutzung im Hintergrund niedrig halten, werden diese stillen Beendigungen im Hintergrund verhindert. So bleibt der Nutzerstatus erhalten und Spieler können ihre Sitzung sofort fortsetzen. Weitere Informationen zum LMK-Verhalten des Systems finden Sie im Leitfaden Android Vitals – Low Memory Killer.
  • Ökosystem- und Gerätestabilität: Eine ineffiziente Arbeitsspeichernutzung und Arbeitsspeicher lecks beeinträchtigen die allgemeine Systemleistung. Wenn der Systemspeicher knapp ist, wird das System stark belastet, was zu niedrigeren Bildraten, UI-Rucklern und Audioproblemen führen kann. Wenn der Arbeitsspeicherdruck zu hoch ist, beendet der Low Memory Killer (LMK) des Systems aggressiv Hintergrundprozesse. Dadurch kommt es bei anderen Anwendungen zu langsamen Kaltstarts und der Nutzerstatus geht verloren, wenn Spieler zwischen Aufgaben wechseln.
  • Beendigungen auf Plattformebene: Ab Android 17 (API-Level 37) beendet das System proaktiver Prozesse, die zu viel Arbeitsspeicher verwenden. Wenn der Arbeitsspeicherbedarf Ihres Spiels zu hoch ist, kann das Betriebssystem den Prozess abrupt beenden, ohne einen Standard-Stacktrace zu generieren.
  • Gerätekompatibilität: Flaggschiffgeräte haben zwar 12 bis 16 GB RAM, aber ein Großteil der weltweiten Gaming-Zielgruppe verwendet Geräte mit 4 oder 6 GB RAM. Durch eine ordnungsgemäße Arbeitsspeicherverwaltung bleibt Ihr Spiel auf allen Hardwareebenen zugänglich und reaktionsschnell, ohne dass komplexe, separate Asset-Pakete erforderlich sind.

Arbeitsspeicher in Android

Um effektive Strategien für die Arbeitsspeicherbudgetierung zu entwickeln, müssen Entwickler wissen, wie die Android-Plattform den physischen Arbeitsspeicher verwaltet und wie der aktive Arbeitsspeicherbedarf ihres Spiels gemessen wird.

Grundlegende Android-Arbeitsspeicherkonzepte

Grundlegende Konzepte zur Arbeitsspeicherverwaltung auf Plattformebene finden Sie in der offiziellen Dokumentation Übersicht zur Arbeitsspeicherverwaltung. Diese Ressource umfasst vier Architekturbereiche:

  • Arbeitsspeicherübersicht: Android verwendet Paging und Memory-Mapping (mmap) zur Verwaltung des RAM. Eine herkömmliche Auslagerungsdatei auf der Festplatte wird nicht unterstützt. Stattdessen werden Seitenkomprimierung (mit zRAM) und Seitenrückforderung verwendet, um physischen Arbeitsspeicher freizugeben.
  • Arbeitsspeicherzuweisung an Prozesse: Android teilt den RAM im gesamten System auf. Es weist bestimmte Heaps für die Ausführung der virtuellen Dalvik- oder ART-Maschine zu, während native Entwicklungsumgebungen (z. B. C++-Game Engines) Arbeitsspeicher aus dem nativen System-Heap anfordern können.
  • App-Arbeitsspeicherverwaltung: Android verwendet ein Mehrprozessmodell. Anwendungen müssen ihren Lebenszyklusstatus dynamisch überwachen und unnötige Ressourcen (z. B. nicht im Cache gespeicherte Grafiken und Bitmaps) freiwillig freigeben, um die Systemleistung zu unterstützen.
  • Übersicht über Prozesse und Threads: Das System kategorisiert Prozesse in einer Hierarchie basierend auf ihrer aktuellen, vom Nutzer wahrgenommenen Sichtbarkeit und Bedeutung. So wird festgelegt, welche Prozesse aktiv bleiben und welche bei wenig Arbeitsspeicher zuerst beendet werden.

Messwert für den gesamten Speicherbedarf

Der Android 17 Memory Limiter auf Plattformebene bewertet den Prozessverbrauch anhand des gesamten Arbeitsspeicherbedarfs und nicht anhand der gesamten residenten Größe (RSS) oder der Größe des virtuellen Arbeitsspeichers.

Gesamter Arbeitsspeicherbedarf = Anonymer RSS (RssAnon) + Unkomprimierter Swap (VmSwap)

Damit Spiele die von der Plattform erzwungenen Limits nicht überschreiten, müssen Entwickler genau wissen, was diese Messwerte auf Systemebene darstellen. Weitere Informationen zu diesen Messwerten, zur physischen RAM-Zuweisung und zur Verarbeitung von dateibasierten Seiten finden Sie im Leitfaden Arbeitsspeicher nutzung überwachen unter RSS- und Swap-Messwerte.

Arbeitsspeicherbeschränkungen

Um die Systemstabilität aufrechtzuerhalten und zu verhindern, dass Anwendungen zu viele Ressourcen verbrauchen, erzwingt die Android-Plattform Arbeitsspeicherlimits für laufende Prozesse.

Memory Limiter in Android 17 und höher

In Android 17 und höher werden strenge, app-spezifische Arbeitsspeicherlimits mit Linux cgroup v2 erzwungen, um zu verhindern, dass einzelne Apps systemweite Instabilität verursachen. Weitere Informationen zur technischen Implementierung finden Sie im AOSP Memory Limiter Guide und im Blogpost Prioritizing Memory Efficiency: Essential Steps for Android 17.

  • Mechanismus: Der Memory Limiter überwacht alle Anwendungsprozesse und weist dynamisch Limits basierend auf dem Lebenszyklusstatus des Prozesses zu:
    • Sichtbare Prozesse (Vordergrund): Für App-Prozesse, die derzeit eine UI anzeigen, wird ein größerer Ressourcensatz erwartet und es wird ein großzügigeres Limit gewährt.
    • Nicht sichtbare Prozesse (Hintergrund oder Dienste): App-Prozesse, die aktiv arbeiten, ohne eine UI anzuzeigen, sind auf ein engeres, restriktiveres Budget beschränkt.
  • Kernelattribute: Der Dienst basiert auf zwei Hauptattributen:
    • memory.high: Ein weiches Limit. Wenn es überschritten wird, drosselt der Kernel den Prozess und versucht, aggressiv Arbeitsspeicher zurückzufordern. Diese Rückforderung kann zu Leistungseinbußen im Spiel führen.
    • memory.swap.max: Erzwingt eine harte Obergrenze für den Swap- oder zRAM-Speicher, den der Prozess verwenden kann.
  • Beendigungsverhalten: Wenn ein Prozess weiterhin anonymen Arbeitsspeicher über memory.high hinaus zuweist und seine Swap-Kapazität erschöpft, schlagen Zuweisungen fehl, und das Betriebssystem beendet den Prozess im Hintergrund. Diese Beendigung wird mit ApplicationExitInfo unter dem Beendigungsgrund „Memory Limiter“ protokolliert (verfügbar ab Android 17, 4. Quartal 2026).

Arbeitsspeichernutzung überwachen

Um den Arbeitsspeicher Ihres Spiels effektiv zu optimieren, müssen Sie zuerst wissen, wie die Android-Plattform den Arbeitsspeicherbedarf misst. In Android 17 wird der Messwert für die Arbeitsspeichererzwingung aktualisiert, um die Summe aus anonymem RSS (RssAnon) und unkomprimiertem Swap (VmSwap) zu erfassen, ohne dateibasierten oder GPU-privaten Arbeitsspeicher. In diesem Leitfaden wird beschrieben, wie Sie Tools auf Systemebene wie Perfetto und meminfo nutzen, Diagnose-APIs wie ProfilingManager und onTrimMemory implementieren und genaue Arbeitsspeicherzuweisungen in Unity und Unreal Engine extrahieren. Sie erfahren, wie Sie Ihr Spiel genau profilieren und die Leistungseinbußen vermeiden, die mit der herkömmlichen Arbeitsspeicherabfrage zur Laufzeit verbunden sind.

Weitere Informationen finden Sie unter Arbeitsspeichernutzung überwachen.

Strategien zur Arbeitsspeicherreduzierung

Game Engines vereinfachen zwar die plattformübergreifende Entwicklung, aber ihre Standard-Arbeitsspeicherverwaltung kann Arbeitsspeicherlimits auf Betriebssystemebene auslösen. Auf dieser Seite werden praktische Optimierungsschritte beschrieben, die speziell auf Unity und Unreal Engine zugeschnitten sind. Sie erfahren, warum die Verwendung von Java-basiertem onTrimMemory in Unity zu Deadlocks führen kann und wie Sie stattdessen native Lebenszyklus-Callbacks verwenden. Außerdem werden wichtige Optimierungen auf Asset-Ebene beschrieben, z. B. die Verwendung der ASTC 8x8-Texturkomprimierung und die Konfiguration des Entladens von Assets, damit Ihr Spiel auf allen Hardwareebenen reibungslos läuft.