2009-05-01 11 views
12

Ich portiere ein Spiel nach Android (es gibt eine Menge Code und sehr wenig davon ist mir), und DalvikVM erzählt mir (über LogCat) alles über die Garbage Collection. Irgendwann im Code bekomme ich einen Strom von "GC frei x Objekte/x ms" Nachrichten, im Grunde informiert, dass ~ 150.000 Objekte wurden gerade gelöscht und es dauert eine volle Sekunde.Android: Track-Nummer der erstellten Objekte

Ich möchte wissen, woher diese kamen! Ich bin mir ziemlich sicher, dass ich absichtlich nicht so viele Objekte erschaffe.

Also, gibt es einen Weg zu bekommen ... im Grunde das Gegenteil dieser Nachricht? Etwas, das eine Protokollnachricht ausgibt, wenn ein Objekt erstellt ist?

So könnte ich über den Code gehen, überprüfen, wie viele Nachrichten generiert werden, und sehen, welche Teile des Codes die Objekte generieren. Ich vermute eine Form der Objekterzeugung in einem Teil einer Schleife, aber wenn möglich, wäre dies ein einfacher Weg, um es sicher zu sagen.

Ich verwende Eclipse 3.4.2, wenn das relevant ist.

Irgendwelche Ideen?

+0

Wenn Sie eine neue Instanz eines Objekts erstellen, können Sie dann keine Nachricht protokollieren? –

+0

Nun, ja, aber ich möchte eine Nachricht protokollieren, wenn _any_ Objekt erstellt wird. Wie, sogar Rects oder Strings oder ... irgendetwas. – mcccclean

Antwort

3

Warum profilieren Sie nicht den vorhandenen Spielecode auf der Sun JVM (vorausgesetzt, Sie portieren ein Java-Spiel)? Dann können Sie JProfiler, Yourkit, etc. nutzen und sehen, welche riesigen Objekte sich auflösen. (Verwenden Sie -XX: + PrintGCDetails, um den GC zu sehen, wann er danach suchen soll.)

Wenn es sich herausstellt, dass es nicht im Spiel ist, haben Sie es ziemlich schmerzlos herausgefunden und können Ihre Aufmerksamkeit dann darauf richten zu deinem Android-Code. Und leider weiß ich nicht viel darüber.

8

Dies ist mit dem ddms-Tool möglich, das mit Android geliefert wird (nicht die Eclipse-Version). Sehen Sie sich dazu die Registerkarte "Zuordnung" an. Sie können damit beginnen, die Zuordnungen aller Objekte zusammen mit den Stack-Traces der Zuordnung zu verfolgen. Dieses Tool kann jedoch eine Vielzahl von Informationen erzeugen und die gewünschten Informationen sind nicht immer einfach zu analysieren oder zu finden. Wenn Sie eine Version für die Sun JVM haben, würde ich empfehlen, die von Kai genannten Tools zu verwenden, die viel weiter entwickelt sind. Wenn Sie dies in Android tun müssen, können Sie mit dem Allocation Tracker beginnen.

Verwandte Themen