2012-07-17 21 views
19

que acabo de hacer una actualización automática de la ICS (4.0.4) a JB (4.1) en mi teléfono androide y se introdujeron varias llamadas de recogida de basura cuando corro mi aplicación:¿Qué significa WAIT_FOR_CONCURRENT_GC bloqueado?

WAIT_FOR_CONCURRENT_GC blocked 30ms 

estoy en la transmisión de vídeo mi aplicación y estas llamadas GC bloqueadas casi doblan mi latencia, ¿qué significan?

Respuesta

31

Ese mensaje se emite en un par de casos:

  • cuando el código del usuario llama explícitamente gc(), y un GC ya está en progreso.
  • cuando el código intenta hacer una asignación pero no hay espacio en la memoria para acomodar la solicitud, y un gc ya está en progreso.

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 caliente que tiene lugar en otro hilo. Una vez hecho esto, el hilo puede pasar a lo que se le pidió más directamente (lo que podría causar una mayor recolección de basura).

Puede encontrar las fuentes más destacadas en platform/dalvik/vm/alloc, particularmente Heap.cpp y Alloc.cpp.

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

+0

Le envié un correo electrónico a través de la dirección de su sitio web, pero no estoy seguro de haberlo recibido, ¿podría verificarlo? –

17

No registramos esta vez antes de JB. Los subprocesos de su aplicación siempre han tenido que bloquear la espera de que se complete una GC simultánea 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.