Runtime Android e Dalvik

Android Runtime (ART) è il runtime gestito utilizzato dalle app e da alcuni sistemi su Android. ART e il suo predecessore Dalvik sono stati originariamente creati in particolare per il progetto Android. ART mentre il runtime esegue il Dalvik il formato eseguibile (DEX) e le specifiche bytecode DEX.

ART e Dalvik sono runtime compatibili che eseguono bytecode DEX, quindi le app sviluppata per Dalvik dovrebbe funzionare nella corsa con ART. Tuttavia, alcune tecniche che funzionano su Dalvik non funzionano su ART. Per informazioni sui ai problemi più importanti, consulta la sezione Verificare comportamento delle app in Android Runtime (ART).

Funzionalità ART

Ecco alcune delle principali funzionalità implementate da ART.

Compilation di anticipo (AOT)

ART introduce la compilazione anticipata, che può migliorare l'esperienza di utilizzo le prestazioni dei dispositivi. ART prevede anche una verifica al momento dell'installazione più severa rispetto a Dalvik.

Al momento dell'installazione, ART compila le app usando l'app dex2oat. Questa utilità accetta file DEX come input e genera un'app compilata come eseguibile per il dispositivo di destinazione. L'utilità deve essere in grado di compilare tutti i file DEX validi senza difficoltà. Tuttavia, alcune attività di post-elaborazione strumenti producono file non validi che potrebbero essere tollerati da Dalvik ma non compilato da ART. Per ulteriori informazioni, vedi Indirizzi Problemi relativi alla garbage collection.

Garbage collection migliorata

La garbage collection (GC) richiede molto risorse, il che può compromettere le prestazioni di un'app, il che si traduce in un display discontinuo, una scarsa reattività della UI e altri problemi. ART migliora la garbage raccolta in diversi modi:

  • Progettazione prevalentemente simultanea con una singola pausa di GC
  • Copia simultanea per ridurre l'utilizzo e la frammentazione della memoria in background
  • La durata della pausa di Google Cloud è indipendente dalla dimensione dello heap
  • Collettore con tempo totale di GC inferiore per il caso speciale della pulizia oggetti di breve durata allocati di recente
  • Miglioramento dell'ergonomia della garbage collection, con una conseguente gestione simultanea raccolte più aggiornate, il che rende GC_FOR_ALLOC estremamente rari nei casi d'uso tipici

Miglioramenti a sviluppo e debug

ART offre una serie di funzionalità per migliorare lo sviluppo e il debug delle app.

Supporto per il profiler di campionamento

In passato, gli sviluppatori usavano Traceview (progettato per il tracciamento esecuzione di app) come profiler. Traceview offre informazioni utili, i suoi risultati su Dalvik sono stati distorti dall'overhead delle chiamate per metodo dello strumento influisce notevolmente sulle prestazioni del tempo di esecuzione.

ART aggiunge il supporto per un profiler di campionamento dedicato che non dispone di questi limitazioni. Questo fornisce una visione più precisa dell'esecuzione dell'app senza un significativo rallentamento. In TraceView è stato aggiunto il supporto del campionamento per Dalvik nella versione KitKat.

Supporto per altre funzionalità di debug

ART supporta una serie di nuove opzioni di debug, in particolare nelle correlate alla garbage collection. Ad esempio, puoi:

  • Visualizza i blocchi conservati nelle analisi dello stack, quindi passa al thread tiene un lucchetto.
  • Chiedi quante istanze attive ci sono per una determinata classe e chiedi di vedere istanze e vedere quali riferimenti mantengono un oggetto attivo.
  • Filtra gli eventi (come il punto di interruzione) per un'istanza specifica.
  • Visualizza il valore restituito da un metodo quando viene chiuso (utilizzando "method-exit" eventi).
  • Imposta watchpoint del campo per sospendere l'esecuzione di un programma quando viene rilevato a cui si accede e/o viene modificato.

Dettagli diagnostici migliorati nei report su eccezioni e arresti anomali

ART fornisce il maggior contesto e dettagli possibile quando si tratta di eccezioni di runtime che si verificano. ART fornisce dettagli espansi dell'eccezione per java.lang.ClassCastException, java.lang.ClassNotFoundException, e java.lang.NullPointerException. (Le versioni successive di Dalvik hanno fornito dettagli estesi dell'eccezione per java.lang.ArrayIndexOutOfBoundsException e java.lang.ArrayStoreException, che ora includono la dimensione dell'array e l'offset fuori intervallo, e ART fa anche questo.)

Ad esempio, java.lang.NullPointerException ora mostra informazioni su ciò che l'app stava cercando di fare con il puntatore null, come il campo in cui l'app stava tentando di scrivere o il metodo a cui stava tentando di chiamata. Di seguito sono riportati alcuni esempi tipici:

java.lang.NullPointerException: Attempt to write to field 'int
android.accessibilityservice.AccessibilityServiceInfo.flags' on a null object
reference
java.lang.NullPointerException: Attempt to invoke virtual method
'java.lang.String java.lang.Object.toString()' on a null object reference

ART fornisce inoltre informazioni contestuali migliorate nei report sugli arresti anomali nativi delle app, includendo informazioni sullo stack sia Java che native.

Segnalare i problemi

Se riscontri problemi non dovuti a problemi relativi a JNI dell'app, segnala tramite il programma Android Open Source Project Issue Tracker. Includi un adb bugreport e collega a l'app nel Google Play Store, se disponibile. Altrimenti, se possibile, allega APK che riproduce il problema.