android garbage-collection dalvik blocked

android - ¿Qué significa WAIT_FOR_CONCURRENT_GC bloqueado?



garbage-collection dalvik (2)

Ese mensaje se emite en un par de casos:

  • cuando el código de usuario llama explícitamente a gc () y ya hay un gc en curso.
  • cuando el código intenta hacer una asignación pero en realidad no hay espacio en la memoria para acomodar la solicitud, y ya hay un gc en curso.

En cualquier caso, lo que está sucediendo es que, para satisfacer la solicitud, el primer paso es esperar la acción de recolección de basura en caliente que está teniendo lugar en otro hilo. Una vez hecho esto, entonces el hilo puede moverse hacia lo que se le pidió hacer más directamente (lo que podría causar una mayor recolección de basura).

Puede encontrar las fuentes salientes en plataforma / dalvik / vm / alloc, particularmente Heap.cpp y Alloc.cpp.

Dicho todo esto, no puedo decirle por qué está viendo más pausas en JB que en ICS.

Acabo de hacer una actualización automática de ICS (4.0.4) a JB (4.1) en mi teléfono Android e introduje varias llamadas de recolección de basura cuando ejecuto mi aplicación:

WAIT_FOR_CONCURRENT_GC blocked 30ms

Estoy transmitiendo video en mi aplicación y estas llamadas GC bloqueadas están casi duplicando mi latencia, ¿qué significan?


No registramos esta vez antes de JB. Los subprocesos de su aplicación siempre han tenido que bloquear la espera de que se complete cualquier GC concurrente antes de que puedan hacer una recopilación, pero JB es la primera versión en la que puede ver cuándo lo hacen y dónde puede ver cuánto tiempo tienen que esperar.