2012-07-17 13 views
19

Ho appena fatto un aggiornamento automatico da ICS (4.0.4) per JB (4.1) sul mio telefono Android e ha introdotto più chiamate di raccolta della spazzatura, quando eseguo il mio app:cosa significa WAIT_FOR_CONCURRENT_GC bloccato?

WAIT_FOR_CONCURRENT_GC blocked 30ms 

sto streaming video in la mia app e queste chiamate GC bloccate stanno quasi raddoppiando la mia latenza, cosa significano?

risposta

31

Questo messaggio viene emesso in un paio di casi:

  • quando il codice utente chiama esplicitamente gc(), ed un gc è già in corso.
  • quando il codice tenta di eseguire un'allocazione ma in realtà non c'è spazio nella memoria per accogliere la richiesta e un gc è già in corso.

In entrambi i casi, quello che sta succedendo è che, per soddisfare la richiesta, il primo passo è l'attesa per l'azione di raccolta automatica dei rifiuti che sta avvenendo in un altro thread. Una volta fatto, il thread può spostarsi su ciò che è stato più direttamente richiesto (che potrebbe causare ulteriore raccolta dei dati inutili).

È possibile trovare le origini salienti nella piattaforma/dalvik/vm/alloc, in particolare Heap.cpp e Alloc.cpp.

Detto questo, non posso dirti perché stai vedendo più pause in JB che in ICS.

+0

Ti ho inviato un'e-mail tramite l'indirizzo del tuo sito web, ma non sono sicuro che tu l'abbia ricevuta, potresti controllarla? –

17

Non abbiamo registrato questa volta prima di JB. I thread della tua app hanno sempre dovuto bloccare l'attesa del completamento del GC simultaneo prima di poter eseguire una raccolta, ma JB è la prima versione in cui puoi vedere quando lo fanno e dove puoi vedere per quanto tempo devono aspettare.