Descripción de los mensajes de Android GC

Tengo el siguiente mensaje en mi catlog,

GC_CONCURRENT freed 456K, 19% free 2753K/3360K, paused 5ms+9ms, total 378ms 

Estoy tratando de dar sentido al total del último valor. He comprobado otros GC relacionados con la pregunta en el sitio que o bien tienen dos pausas asociadas con el GC concurrente o una sola pausa total para el GC no concurrentes. ¿Por qué tengo dos? ¿Se detuvo mi aplicación durante 5 + 9 ms o 378 ms? ¿Qué es exactamente el total?

No tengo una respuesta definitiva, pero por lo que obtengo, GC_CONCURRENT es una colección de elementos no utilizados que se ejecuta en un subproceso separado. Esto significa que aunque puede tardar un total de X ms (378 en su caso) para ejecutarse, su hilo de ejecución real no se bloqueará durante tanto tiempo. Sólo se bloqueará un poco al principio y al final del proceso de recopilación simultánea de la basura (5 + 9 = 14ms en su ejemplo)

Este tipo de recolección de basura es activado automáticamente por la JVM cuando decide que es un buen momento para hacerlo (normalmente cuando el montón ha crecido peligrosamente alto). Otros tipos de GC, como GC_EXPLICIT (si no me equivoco en el nombre) se activa cuando se hace una

System.gc ();

en su código. Para este tipo de recolección de basura sólo informará una vez (como Y ms) y, en este caso, el hilo se bloqueará durante ese tiempo hasta que finalice este tipo de proceso GC.

GC_CONCURRENT : Se activa cuando el montón está creciendo. Así que puede recuperar la memoria en el tiempo para que el montón no necesita ser ampliado

GC_CONCURRENT liberado 456K

Esta parte le dice cuánta memoria fue liberada por este barrido GC

GC_CONCURRENT liberado 456K, 19% libre 2753K / 3360K

Esta parte indica cuánto% de la pila está libre, el tamaño de los objetos vivos y el tamaño total de la pila. Así que en el ejemplo anterior el 19% libre, hay 2753Kmemory en uso y el tamaño de montón total es 3360K.

La última parte del registro le dice cuánto tiempo tomó la GC. en una colección GC_CONCURRENT verá 2 veces. uno al principio de la colección y otro al final.

Para n eventos de GC concurrentes, sólo hay un tiempo de pausa y normalmente es mucho mayor. Por ejemplo, pausó 378ms

Fuente:

https://sites.google.com/site/pyximanew/blog/androidunderstandingddmslogcatmemoryoutputmessages

Otro lugar donde las cosas se explican claramente …

http://www.youtube.com/watch?v=_CruQY55HOk

De mirar algunos systraces que tomé parece que el total (378ms) no refleja cuánto tiempo el GC realmente hizo una pausa su aplicación. Refleja cuánto tiempo tomó la recolección de basura. El tiempo pausado es lo que debe buscar en eso.

Echa un vistazo a esta pregunta que explica los mensajes de recolección de basura, etc
Si necesita más información, vea este video de google acerca de la administración de memoria

http://www.youtube.com/watch?v=_CruQY55HOk .

Mire el video alrededor de 17 minutos. El chico explica el mensaje logcat en detalle.

 GC_CONCURRENT freed 456K, 19% free 2753K/3360K, paused 5ms+9ms, total 378ms GC_CONCURRENT : Jumps in because Heap is growing 19% free 2753K/3360K After this collection 19% of memory is free. Check the heap usage.paused 5ms+9ms Time taken to collect garbage. Total pause time is 378ms. 
  • Diferencia entre system.gc () y runtime.gc ()
  • Referencia débil para la llamada de red mala idea?
  • La actividad principal no es la basura recogida después de la destrucción porque es referenciada por InputMethodManager indirectamente
  • LeakCanary detecta pérdida de memoria de Android WebView
  • El recolector de basura de Android trabaja duro en mi aplicación
  • La interfaz de usuario de aplicación se congela con mensajes de GC
  • Android adecuada limpieza / eliminación
  • Garbage Collection causa: MediaPlayer finalizado sin ser lanzado
  • java.lang.OutOfMemoryError: Límite de sobrecarga de GC superado en Android 1.4
  • Memoria liberada del colector de basura de Android
  • Variables que se recolectan basura
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.