kia entrar descargar como aparece android ddms

android - entrar - DDMS Heap-matriz de 1 byte(byte[], booleano[])



ddms kia (3)

Corrí a este problema esta noche y casi revisé cada parte del código pero no pude encontrar nada.

Lo que hice fue iniciar la aplicación desde intelij y luego presionar el botón de inicio y volver a abrir la aplicación. Cada vez que el montón de aplicaciones se duplicó.

Finalmente, descubro que cuando lanzo la aplicación desde ADB, presiono el botón de inicio y abro la aplicación nuevamente, no devuelve la actividad anterior, solo comienza una nueva. Cuando presiono terminar comienza a recorrer todos ellos. Es como si fueran tratados como dos intenciones diferentes. Así que puse android:launchMode="singleTop" en la actividad principal en manifiesto y resolvió el problema.

Aunque no es la causa principal de este problema, pero si se encontró con esto, verifique esto antes de nada. Perdí tres o cuatro horas para mí.

Experimento algunas pérdidas de memoria en mi aplicación de Android. Ya he usado MAT para analizar el uso de la memoria. Pero tengo una pregunta de la perspectiva DDMS en Eclipse, ¿qué significa matriz de 1 byte [byte [], booleano [])?

¿Es esto específico para mi aplicación? Puede ver que este es el problema de la pérdida de memoria grande, esto siempre aumenta de tamaño y el resto aumentará y disminuirá aleatoriamente. Mi conjetura es que el GC no captura este tipo. ¿Alguien puede explicar por qué sucede esto con esta poca información?


Una matriz de bytes es la designación de cualquier estructura de datos que se organiza como una matriz de un solo byte. En su caso y con ese tamaño, apostaría en un Bitmap o Drawble.

Las razones más comunes para las pérdidas de memoria son objetos estáticos que no se administran correctamente y contienen referencias a:

  • Contexto
  • Vista (que contiene la referencia al contexto (y posiblemente también al mapa de bits)
  • Hilo (que GC no recoge fácilmente)
  • Manejador (que tiene referencia al contexto)

La mayoría de ellos se pueden resolver asegurando que establece el objeto en nulo cuando ya no es necesario.

Saludos.


Un byte y un boolean son cada uno de 1 byte. Si tiene una matriz de esos, tiene una "matriz de 1 byte".

Un ByteBuffer por ejemplo, debe contener internamente uno de esos.

Tiene un total de 614 de ellos, donde el más pequeño es un byte[24] (o boolean[24] ), el más grande es de 3MB. Todos juntos usan 104MB.

El CG se librará de ellos si ya no están referenciados.

Por ejemplo cuando pones

private static byte myArray[] = new byte[3 * 1024 * 1024];

en una de sus clases y nunca lo vuelva a establecer en nulo ( myArray = null ), entonces esta no puede ser recogida de basura porque otro objeto tiene una referencia a ella. El objeto sería la clase en sí (como en String.class ). El objeto de clase no se puede recolectar basura ya que las clases nunca se descargan. (son referenciados por su ClassLoader que a su vez podría ser referenciado / cargado por otro ClassLoader y no puede crear Objetos y usar clases sin ellos; deben permanecer y deben mantener una referencia a sus clases)

Generalmente no es tan simple, pero a menudo comienza con static algún lugar.

Dentro de MAT (después de forzar GC) mira la cadena de referencia para los objetos que ya no están destinados a permanecer vivos e identifica el Objeto que contiene la referencia. Establezca ese null como null en su código y su pérdida desaparecerá. Explicado con más detalle aquí:

http://android-developers.blogspot.de/2011/03/memory-analysis-for-android.html