2009-05-01 14 views
12

Estoy portando un juego a Android (hay un montón de código y muy poco es mío), y DalvikVM me dice (a través de LogCat) todo sobre la recolección de basura. En algún punto del código, recibo un flujo de mensajes de "GC liberado x objetos/x ms", básicamente informándome que ~ 150,000 objetos acaban de ser borrados y están tomando un segundo completo.Android: seguimiento del número de objetos creados

¡Quiero saber de dónde vienen estos! Estoy bastante seguro de que no estoy creando muchos objetos intencionalmente.

Entonces, ¿hay alguna manera de obtener ... básicamente lo contrario de ese mensaje? Algo que imprime un mensaje de registro cuando cualquier objeto es creado?

De esta forma podría pasar el código, verificar cuántos mensajes se generan y ver qué partes del código están generando los objetos. Sospecho que existe alguna forma de creación de objetos en parte de un ciclo, pero si es posible, sería una manera fácil de asegurarlo.

Estoy usando Eclipse 3.4.2, si es relevante.

¿Alguna idea?

+0

cuando crea una nueva instancia de un objeto, ¿no puede registrar un mensaje, entonces? –

+0

Bueno, sí, pero quiero registrar un mensaje cuando se crea _any_objeto. Me gusta, incluso Rectos o Cuerdas o ... cualquier cosa. – mcccclean

Respuesta

3

¿Por qué no perfila el código de juego existente en Sun JVM (suponiendo que está portando un juego de Java)? Luego puede aprovechar JProfiler, Yourkit, etc. y ver qué gran cantidad de objetos se están limpiando. (Use -XX: + PrintGCDetails para ver el GC se ejecuta para cuándo buscarlo).

Si resulta que no está en el juego, se ha dado cuenta de ello sin mucha dificultad, y puede entonces volver su atención a tu código de Android. Y desafortunadamente de lo que no sé mucho.

8

Esto es posible usando la herramienta ddms que viene con Android (no la versión de Eclipse). Con eso, mira la pestaña del rastreador de asignación. Puede comenzar a rastrear asignaciones de todos los objetos junto con los rastros de pila de donde fueron asignados. Sin embargo, esta herramienta puede producir una gran cantidad de información y la información particular que desea no siempre es fácil de analizar o encontrar. Si tiene una versión para Sun JVM, le recomendaría usar las herramientas que Kai mencionó, están mucho más desarrolladas. Si tiene que hacerlo en Android, usar el rastreador de asignación le dará un comienzo.

Cuestiones relacionadas