2012-12-01 10 views
5

Ho una situazione in cui una mia applicazione Android non è in grado di eseguire un compito in tempo reale morbido in tempo come viene chiamato Garbage Collector che richiede alcuni millisecondi. I pochi ms di tempo dati a GC sono inadeguati per perdere una scadenza importante per le piccole attività di lettura dei dati dal dispositivo IO.Il Garbage Collector di DalvikVM blocca l'intera VM?

Stavo pensando di introdurre un altro thread e assegnargli il compito di eseguire il polling dei dati importanti. Tuttavia non sono sicuro che GC sospenda tutti i thread o solo quelli di memoria?

risposta

9

In Memory Management for Android Apps by Patrick Dubroy ho trovato la seguente (slide 16, corsivo mio):

  • Pre-Gingerbread GC:

    • Stop-the-world

    • completa raccolta heap

    • volte Pausa spesso > 100ms

  • Gingerbread e oltre:

    • concomitante (per lo più)

    • collezioni parziali

    • tempi di pausa solito < 5ms

In generale, raccolta dei rifiuti deve interrompere l'intero VM, anche se oggi questo tempo notevolmente ridotto. Tuttavia né la VM né la piattaforma Android nel suo complesso non sono sistemi operativi in ​​tempo reale, quindi non aspettatevi garanzie così severe.

Perché è necessaria una precisione millisecondo?

+0

Ricevo un flusso di eventi di sistema dal kernel. Se lo stream non viene letto in tempo, gli eventi vengono eliminati. Garbage Collection mettere in pausa la VM può essere fastidioso per me. Non sono sicuro della soglia temporale esatta al di sopra della quale sarà problematico, ma 100 ms sono sicuramente troppo alti. 5 ms possono o non possono essere problematici; Dovrò fare qualche sperimentazione. Grazie. – sharjeel