Wie kann man den Speicherverbrauch prüfen?

GMoN

GMoN

Dauergast
394
Ich schreibe sehr viele Daten in eine Arraylist. Das kann bei sehr vielen Daten zu Heap Speicher Problemen führen. Jetzt wollte ich mal schauen, wieviel speicher denn meine app nun wirklich bei wievielen Daten belegt. Ich bekomme aber leider keine brauchbaren Anzeigen. Im DDMS steht immer Heap size 3,4 MB und Allocated 2,4 MB, egal ob 0 Datensätze oder 100.000 geladen sind.

Code:
Log.v(TAG, "Service Heap size: "+android.os.Debug.getNativeHeapSize()/1024);
Log.v(TAG, "Service Heap free: "+android.os.Debug.getNativeHeapFreeSize()/1024);
Log.v(TAG, "Service Heap alloc: "+android.os.Debug.getNativeHeapAllocatedSize()/1024);

Liefern auch immer bei size und Allocated ca. 7MB. Auch ändert sich gar nichts, wenn ich im Programm nach dem Laden der Daten die Arraylist mit .clear() lösche und null setze.

Auch habe ich festgestellt, dass das Milestone 24MB max. Heap size hat und das N1, obwohl sogar etwas mehr Speicher nur 16MB hat, beide mit original ROM, das N1 natürlich mit Froyo.

Wie kann ich jetzt möglichst genau den Speicherverbrauch meiner Activity und des services monitoren? Am besten mit Speichergrößen Anzeige jeder Arraylist. Geht sowas?
 
Also DDMS bringt 2 Tools mit. "Heap" und "Allocation Tracker". Wenn du bei Devices deine laufende App auswählst und auf den "Update Heap" Button drückst (der grüne, ohne roten Pfeil), dann kannst du im Fenster rechts daneben auf den Tab Heap wechseln und siehst dort wieviel Speicher allokiert ist. Immer, wenn der GC durchläuft updated sich die Speicheranzahl. Man kann den GC auch gezielt starten, um ein update zu erhalten (per Klick auf "Cause GC"). Außerdem werden dadrunter die Typen der allokierten Objekte angezeigt. Bei einer ArrayList werden das dann wahrscheinlich "Data Objects" sein.

Mit dem Allocation Tracker kannst du gezielt überprüfen, wann besonders viele Allokationen gemacht wurde. Dazu einfach auf Start Tracking klicken, dann die gewünschte Aktion im Emulator (oder Device) durchführen und auf Get Allocations drücken.
 
BenOtto schrieb:
Also DDMS bringt 2 Tools mit. "Heap" und "Allocation Tracker". Wenn du bei Devices deine laufende App auswählst

Da scheint mein Problem zu stecken. Unter den Devices finde ich meine App nicht. Da ist nur das Handy und com.google.android.apps.uploader. Oder geht das nur im Emulator? Ich nutze den Emulator nicht, sondern nur das Milestone oder das Nexus. Oder muss ich in der App noch irgendwie den debug Modus aktivieren? Logcat funktioniert aber.
 
Vermutlich hast du im Manifest nicht deklariert, dass die App debuggable ist. Drück mal unter <application... android:debuggable="true" rein.
 
  • Danke
Reaktionen: GMoN
Ok Danke, im DDMS kommen jetzt plausible Werte. Allerdings kommen bei android.os.Debug.getNativeHeapSize()/1024 immer noch völlig falsche Werte. Muss da auch noch was beachtet werden, wenn man die Werte im Programme auslesen möchte?
 

Ähnliche Themen

S
Antworten
7
Aufrufe
1.157
swa00
swa00
D
Antworten
14
Aufrufe
1.704
chrs267
chrs267
M
Antworten
3
Aufrufe
160
moin
M
Zurück
Oben Unten