Der Arbeitsspeicher ist eine wichtige und endliche Ressource auf Android-Geräten. Als Android-Plattformentwickler oder OEM ist es wichtig, zu verstehen, wie der Arbeitsspeicher auf allen Ebenen funktioniert – von der Java-Laufzeit bis zum Linux-Kernel –, um ein leistungsstarkes und stabiles System zu entwickeln.
Dieser Leitfaden bietet einen umfassenden Überblick über die Android-Speicherarchitektur, die für die Analyse verfügbaren Tools und praktische Übungen, mit denen Sie speicherbezogene Probleme identifizieren und beheben können.
Ziele
Nach Abschluss dieses Leitfadens können Sie:
- Die grundlegenden Konzepte des Android-Arbeitsspeichers erklären, einschließlich des Zygote-Prozessmodells und der speicherzugeordneten Dateien.
- Unterscheiden Sie zwischen Resident Set Size (RSS), Proportional Set Size (PSS) und Unique Set Size (USS).
- Verwenden Sie Standard-Befehlszeilentools wie
dumpsys meminfoundshowmap, um die Speichernutzung schnell zu ermitteln. - Java-Heap-Dumps mit AHAT erfassen und analysieren, um Lecks und übermäßige Zuweisungen zu finden.
- Verwenden Sie Perfetto und
heapprofd, um sowohl den Java- als auch den nativen Arbeitsspeicher im gesamten System zu profilieren. - Systemweite Indikatoren für die Arbeitsspeicherauslastung wie Pressure Stall Information (PSI) verstehen und die Aktivität des Low Memory Killers (LMK) überwachen.
- Beobachten Sie die Freigabeaktivität auf Kernelebene, einschließlich ZRAM-Swap und Entfernung des Seitencaches.
Inhaltsverzeichnis
Dieser Leitfaden ist in die folgenden Abschnitte unterteilt, die nacheinander gelesen werden sollten:
- Grundlegende Konzepte: Die wichtigsten technischen Prinzipien des Android-Arbeitsspeichers.
- Tools für die schnelle Bewertung:
meminfo,showmapundprocstatsfür die schnelle Triage. - Java-Speicher analysieren: Detaillierte Informationen zum Java-Heap mit AHAT.
- Bitmaps und Arbeitsspeicher: Hier erfahren Sie, wie sich Bilder auf den RAM auswirken und wie Sie Tools zur Profilerstellung verwenden.
- Nativen Arbeitsspeicher analysieren: C/C++-Arbeitsspeicher mit Perfetto und
heapprofdprofilieren. - WebView und Arbeitsspeicher: Informationen zur Multiprozessarchitektur und zum Speicherbedarf von WebViews.
- App-Code ist Arbeitsspeicher: Hier erfahren Sie, wie sich das Laden von Klassen und die Dex-Bloat auf den RAM auswirken.
- Threads und Arbeitsspeicher: Kosten nativer Thread-Stacks analysieren.
- Speicherlokalität und Leistung: Verstehen, wie sich Datenzugriffsmuster auf die CPU-Leistung auswirken.
- Dienstbindungen und Prozessstatus: Informationen dazu, wie sich prozessübergreifende Abhängigkeiten auf OOM-Werte auswirken.
- Systemweite Fehlerbehebung: Überwachung von PSI, LMK, ZRAM-Swap und Page-Cache-Entfernung.
- Speicherfreigabe: Entfernung und Auslagerung: Informationen zu memcg, Charge und proaktiver Freigabe mit
memory.reclaim. - Interaktion zwischen kswapd und lmkd: Informationen dazu, wie kswapd und lmkd unter Druck zusammenarbeiten.
- Speicherseiten an das Betriebssystem zurückgeben: Mit
madviseundposix_fadvisewerden nicht verwendete Heap-Seiten und Datei-Cache-Seiten an den Kernel zurückgegeben. - Hintergrundarbeit mit einem schlanken Prozess aufrechterhalten: Hintergrunddienste und Worker in einen dedizierten Prozess verschieben, damit die Benutzeroberfläche und der Grafikspeicher nicht mit erhöhter Priorität gehalten werden.
Voraussetzungen und Umgebung
In diesem Leitfaden finden Sie Referenz-Workflows, Benchmark-Daten und Fallstudien, die zeigen, wie Sie Android-Speicherprobleme diagnostizieren und beheben können.
- Analysetools: Für die Techniken in diesem Leitfaden werden hauptsächlich Standardtools für die Android-Leistung verwendet, darunter Perfetto,
dumpsys meminfo,showmapund AHAT. - Root-Berechtigungen: Für einige Diagnoseworkflows auf Systemebene (z. B. die Prüfung der Kernel-Speicherauslastung oder der Hardware-PMU-Zähler) sind erhöhte Root-Berechtigungen (
adb root) auf einem Userdebug-Gerät oder Emulator-Build erforderlich.
Hier beginnen: Grundlegende Konzepte