Android Studio Memory Profiler meldet Zuordnungen in Others
Kategorie.`Unbekannt` (` Other`) Speicherleck in Android?
Nach https://developer.android.com/studio/profile/memory-profiler.html: Andere: Speicher durch Ihre Anwendung verwendet, die das System nicht sicher ist, wie zu kategorisieren.
Wenn wir tiefer graben, ähnliche Speicherbedarf Informationen können https://developer.android.com/reference/android/os/Debug.MemoryInfo.html#getMemoryStat(java.lang.String)
mit zur Laufzeit abgerufen werden Es ist wie Others
in Android Studio Memory Profiler sucht entspricht summary.private-other
in Debug.MemoryInfo
Klasse. Dieser Parameter wird gemeldet als:
public int getSummaryPrivateOther() {
return getTotalPrivateClean()
+ getTotalPrivateDirty()
- getSummaryJavaHeap()
- getSummaryNativeHeap()
- getSummaryCode()
- getSummaryStack()
- getSummaryGraphics();
}
Welche Art von Speicherzuweisungen enden in dieser Kategorie? Es ist offensichtlich nicht Java, Native, Code, Stack und Grafik.
Wenn meine App (mit enorm großen Codebasis, so dass ich nicht wirklich einen bestimmten Code, der es verursacht) zeigen kann verbraucht viel Other
Speicher, gibt es eine bestimmte Quelle/Muster, die zu einem solchen Verbrauch führt?
Edit 1 ich in der Lage war teilweise meine eigene Frage des ersten Teil zu beantworten:
Welche Art von Speicherzuordnungen in dieser Kategorie am Ende? Es ist offensichtlich nicht Java, Native, Code, Stack und Grafik.
RAM Info kann auch adb shell dumpsys meminfo <your proc name>
abgerufen wird unter Verwendung von und in der Regel wie folgt aussieht:
Experimentell kann ich sehen, dass Unknown
wird höchstwahrscheinlich in Private Other
enthält. Was wirft die nächste Frage auf: Was ist Unknown
? Nach https://developer.android.com/studio/command-line/dumpsys.html#meminfo:
Jede RAM-Seiten, die das System nicht in einem der die anderen speziellere Produkte klassifizieren könnte. Momentan enthält dies meist native Zuordnungen, die vom Tool beim Sammeln dieser Daten aufgrund von Address Space Layout Randomization (ASLR) nicht identifiziert werden können. Wie die Dalvik-Heap berücksichtigt die Pss Total für Unknown Freigabe mit Zygote, und Private Dirty ist unbekannt RAM nur für Ihre App gewidmet.
Es sieht aus wie es noch native Zuordnungen ist. Identifizierbare native Zuordnungen enden in der Kategorie Native
. Native Zuordnungen, deren Daten aufgrund von ASLR nicht mehr identifizierbar sind, scheinen jedoch in Unknown
zu enden.
Die Hauptfrage hält jedoch nach wie vor:
Wenn meine app (mit enorm großen Code-Basis, so kann ich nicht wirklich Stift Punkt ein bestimmter Code, der es verursacht) verbraucht viel
Other
Speicher, ist Gibt es eine bestimmte Quelle/Muster, die zu einem solchen Konsum führt? Ich bin für Antworten wie hängende Fäden suche, offene Cursor, WebViews usw.
Danke für die Untersuchung, das ist interessant zu finden! – azizbekian