RAM-Verwendung in Android L vs. Kitkat
Hier ist ein seltsames Problem, das ich fand, als ich die Analyse unserer android jar Kompatibilität in lollipop.Ich bin neu auf android.Ich schrieb eine einfache app , die hat einen einzigen Bildschirm, und eine Taste und auf-Taste drücken, ruft die Methoden, die in der jar führen einige server Aufrufe.Ich verwendet die adb-Befehle zum analysieren der Speicherbedarf der app,
adb shell dumpsys meminfo <package_name>
Und hier ist die Bilanz in kitkat,(ich habe nicht fügen Sie die restlichen Zeilen, als würden wir uns sorgen machen nur im privaten schmutzige Spalte von dalvik-heap in den Fuß zu drucken, so dass Sie den zugewiesenen Arbeitsspeicher exklusiv für die app-einschließlich unserer eigenen-Zuweisungen.)
** MEMINFO in pid 876 [XXXXX] **
Pss Private Private Swapped Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 3054 3032 0 0 6208 5733 178
Dalvik Heap 4338 4012 0 0 12756 11514 1242
Und hier ist die Bilanz in lollipop,
** MEMINFO in pid 201 [XXXX] **
Pss Private Private Swapped Heap Heap Heap
Total Dirty Clean Dirty Size Alloc Free
------ ------ ------ ------ ------ ------ ------
Native Heap 3412 3360 0 0 5572 5236 335
Dalvik Heap 10359 10132 0 0 18762 11338 7424
Vergleicht man die dalvik heap private schmutzige Spalte, die in beiden, kitkat verwendet, um 4MB RAM und lollipop verwendet rund 10 MB RAM.Es ist die gleiche app ausgeführt wurde, sowohl in der OS, und der Unterschied ist groß.
Paar der Fragen, die auf dieser Grundlage
- Hat irgendjemand von Euch sehen, diese Art von einem erhöhten Speicherbedarf in lollipop?.
- Eine Ahnung, warum die RAM-Auslastung ist höher bei lollipop?
- Gibt es ein tool, zum visualisieren der RAM-Zuordnungen der app?.
PS: ich nahm heap-dump der app in lollipop und ich kann sehen, 4.4 MB Arbeitsspeicher genutzt von android.res.Ressourcen-System die Objekte der Klasse.Ich habe keine Ahnung, was sein könnte, diese Ressourcen Objekte, da weder die app noch das Glas hat statische Ressourcen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Android Lollipop hat eingebaute ART(Android Runtime) der virtuellen Maschine anstelle von Dalvik-vm im Falle von Kitkat. KUNST führt die transformation von der Anwendung bytecode in native Anweisungen, die später ausgeführt durch das Gerät runtime-Umgebung .Kunstwerke, die auf dem Konzept von ahead of time Kompilierung(AOT) und speichert die kompilierten Klassen, die während der installation der Anwendung, wo als Dalvik arbeitet nach dem Prinzip der Just-in-time (JIT) - Kompilierung und löscht den cache von kompilierten Klassen, sobald die Anwendung vorhanden ist, und kompilieren Sie ist jede Klasse immer eine neue Instanz der Anwendung gestartet wird.
Zur Aufrechterhaltung der Abwärtskompatibilität mit vorhandenen apps. KUNST nutzt die gleichen input-bytecode als Dalvik, geliefert, die über standard .dex-Dateien als Teil von APK-Dateien, während die .odex-Dateien ersetzt werden Ausführbare und Verknüpfbar Format (ELF) ausführbare Dateien. Sobald eine Anwendung kompiliert wird, mithilfe von KUNST auf dem Gerät dex2oat Dienstprogramm ausführen, die ausschließlich von der kompilierten ELF executable; dieser Ansatz vermeidet verschiedene Gemeinkosten beteiligt mit JIT-Kompilierung, aber es erfordert zusätzliche Zeit für die Zusammenstellung, wenn eine Anwendung installiert ist, und die Anwendungen leicht größere Mengen an Speicherplatz zum speichern des kompilierten Codes.
cat /proc/meminfo-Diese geben einige Speicher-Statistiken. In, dass, wenn Sie hinzufügen, "memfree + Cache" erhalten Sie insgesamt freier Speicher frei.
dumpsys meminfo-so erhalten die Speicher-Informationen für alle Laufenden Prozesse
dumpsys meminfo -dump für einen bestimmten Prozess.
Abgesehen davon können Sie auch mit Eclipse MAT-plugin für die Analyse von JVM-heap-Inhalte.
Speicher ist entweder privat, was bedeutet, es ist exklusiv für diesen Prozess, oder geteilt werden, was bedeutet, dass mehrere Prozesse, die Sie haben können, zugeordnet und im Einsatz (denke, shared-library-code, etc.). Speicher kann auch sauber - es wurde nicht geändert, da war es von Platte geladen oder bereitgestellt, die als null-gefüllte Seiten oder was auch immer, und so, wenn es braucht, um befreit zu bieten Speicher-Seiten für andere Prozesse, es können nur abgelegt werden, und neu geladen/neu gefüllt, wenn es ist immer wieder benötigt werden - oder schmutzig, was bedeutet, dass, wenn es muss freigegeben werden, es muss geschrieben werden, um einen swap-Bereich, so dass der geänderte Inhalt wiederhergestellt werden können, wenn nötig.
Überprüfen Sie diese link. Es wird Ihnen ein überblick von der zygote Speicherzuordnungen.