Frage

Ich entwickle eine Anwendung auf Android. Es ist eine lang laufende Anwendung, die Sensordaten kontinuierlich verarbeitet. Beim Ausführen der Anwendung sehe ich viele GC -Nachrichten in der Logcat. Jede Sekunde ungefähr eins.

Dies liegt höchstwahrscheinlich daran, dass Objekte in einer Schleife erstellt und sofort debezogen werden.

Wie finde ich, welche Objekte sofort erstellt und veröffentlicht werden?

Alle Java Heap -Analyse -Tools, die ich ausprobiert habe (*), sind mit den Zählungen und Größen von Objekten auf dem Haufen gestört. Obwohl sie nützlich sind, bin ich mehr daran interessiert, die Website dort herauszufinden, wo vorübergehend Kurzlebige Objekte werden am meisten erstellt.

(*) Ich habe es versucht jcat und Eclipse MAT. Ich konnte nicht bekommen hat an den Android Heap-Dumps zu arbeiten; Es klagte über eine nicht unterstützte Dump -Dateiversion.

War es hilfreich?

Lösung

Wie finde ich, welche Objekte sofort erstellt und veröffentlicht werden?

Schritt 1: Ändern Sie vorübergehend Ihren Code (oder erstellen Sie ein Schrottprojekt mit den entsprechenden Teilen Ihres Codes), in dem Sie auf eine Schaltfläche klicken können oder etwas, um genau die Sensorverarbeitungslogik auszuführen.

Schritt 2: Gehen Sie in DDMS (Standalone oder die Eclipse -Perspektive).

Schritt 3: Wählen Sie Ihren Emulator aus und klicken Sie dann auf die Registerkarte "Allocation Tracker"

Schritt 4: Rufen Sie Ihre Anwendung auf den Punkt ein, an dem sie auf die Schaltfläche von Schritt 1 wartet. Klicken Sie dann auf die Registerkarte DDMS Allocation Tracker auf Starten.

Schritt 4: Klicken Sie auf die Schaltfläche und wenn der Sensorverarbeitungspass abgeschlossen ist, klicken Sie auf der Registerkarte DDMS Allocation Tracker auf der Registerkarte DDMS Allocation Tracker abrufen.

Dies wird Ihnen sagen, was während dieses Teils Ihres Codes zugewiesen wurde. Es wird Ihnen nicht gesagt, was "freigegeben" ist, da das unbestimmt ist, bis ein GC -Zyklus ausgeführt wird.

BEARBEITEN

Ich bin mir nicht sicher, aber startAllocCounting() auf der android.os.Debug Die Klasse hat möglicherweise den gleichen Effekt wie das Klicken auf die Schaltfläche "Start Tracking". In diesem Fall können Sie Ihren Code einfach instrumentieren, um Zuordnungen über einen Durchgang Ihrer Schleife zu verfolgen, anstatt sich mit den oben beschriebenen Codeänderungen zu beschäftigen.

Und fwiw, Hier ist ein kurzer technischer Artikel auf DDMS und Allokationsverfolgung.

Andere Tipps

Ich denke, Sie müssen Allocation Tracker versuchen :)

(in Ihrem /Tools Dir)

http://developer.android.com/resources/articles/track-mem.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top