Android Runtime (ART) e Dalvik

Android runtime (ART) è il runtime gestito utilizzato dalle applicazioni e da alcuni servizi di sistema su Android. ART e il suo predecessore Dalvik sono stati originariamente creati appositamente per il progetto Android. ART come runtime esegue il formato eseguibile Dalvik e la specifica del bytecode Dex.

ART e Dalvik sono runtime compatibili che eseguono Dex bytecode, quindi le app sviluppate per Dalvik dovrebbero funzionare durante l'esecuzione con ART. Tuttavia, alcune tecniche che funzionano su Dalvik non funzionano su ART. Per informazioni sui problemi più importanti, consulta Verifica del comportamento dell'app nel runtime di Android (ART) .

Caratteristiche dell'ARTE

Ecco alcune delle principali funzionalità implementate da ART.

Compilazione anticipata (AOT).

ART introduce la compilazione anticipata (AOT), che può migliorare le prestazioni dell'app. ART ha anche una verifica del tempo di installazione più stretta rispetto a Dalvik.

Al momento dell'installazione, ART compila le app utilizzando lo strumento dex2oat sul dispositivo. Questa utilità accetta i file DEX come input e genera un eseguibile dell'app compilato per il dispositivo di destinazione. L'utilità dovrebbe essere in grado di compilare tutti i file DEX validi senza difficoltà. Tuttavia, alcuni strumenti di post-elaborazione producono file non validi che possono essere tollerati da Dalvik ma non possono essere compilati da ART. Per ulteriori informazioni, vedere Risoluzione dei problemi di raccolta dei rifiuti .

Raccolta dei rifiuti migliorata

Garbage Collection (GC) richiede molte risorse, il che può compromettere le prestazioni di un'app, con conseguente visualizzazione instabile, scarsa reattività dell'interfaccia utente e altri problemi. ART migliora la raccolta dei rifiuti in diversi modi:

  • Progettazione per lo più simultanea con una singola pausa GC
  • Copia simultanea per ridurre l'utilizzo e la frammentazione della memoria in background
  • La durata della pausa GC è indipendente dalla dimensione dell'heap
  • Collettore con tempo GC totale inferiore per il caso speciale di ripulire oggetti di breve durata assegnati di recente
  • Migliorata l'ergonomia della raccolta dei rifiuti, rendendo le raccolte dei rifiuti simultanee più tempestive, il che rende gli eventi GC_FOR_ALLOC estremamente rari nei casi d'uso tipici

Miglioramenti allo sviluppo e al debug

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

Supporto per il profiler di campionamento

Storicamente, gli sviluppatori hanno utilizzato lo strumento Traceview (progettato per tracciare l'esecuzione delle applicazioni) come profiler. Sebbene Traceview fornisca informazioni utili, i suoi risultati su Dalvik sono stati distorti dall'overhead per chiamata al metodo e l'uso dello strumento influisce notevolmente sulle prestazioni del tempo di esecuzione.

ART aggiunge il supporto per un profiler di campionamento dedicato che non ha queste limitazioni. Ciò offre una visione più accurata dell'esecuzione dell'app senza rallentamenti significativi. Il supporto per il campionamento è stato aggiunto a Traceview per Dalvik nella versione KitKat.

Supporto per più funzioni di debug

ART supporta una serie di nuove opzioni di debug, in particolare nelle funzionalità relative al monitoraggio e alla raccolta dei rifiuti. Ad esempio, puoi:

  • Guarda quali blocchi sono mantenuti nelle tracce dello stack, quindi passa al thread che contiene un blocco.
  • Chiedere quante istanze live ci sono di una data classe, chiedere di vedere le istanze e vedere quali riferimenti mantengono vivo un oggetto.
  • Filtra gli eventi (come il punto di interruzione) per un'istanza specifica.
  • Visualizza il valore restituito da un metodo quando esce (usando gli eventi "method-exit").
  • Imposta il punto di controllo del campo per sospendere l'esecuzione di un programma quando si accede e/o si modifica un campo specifico.

Dettagli diagnostici migliorati nelle eccezioni e nei rapporti sugli arresti anomali

ART ti offre più contesto e dettagli possibili quando si verificano eccezioni di runtime. ART fornisce dettagli estesi sull'eccezione per java.lang.ClassCastException , java.lang.ClassNotFoundException e java.lang.NullPointerException . (Le versioni successive di Dalvik hanno fornito dettagli estesi sull'eccezione per java.lang.ArrayIndexOutOfBoundsException e java.lang.ArrayStoreException , che ora includono la dimensione dell'array e l'offset fuori dai limiti, e ART lo fa anche.)

Ad esempio, java.lang.NullPointerException ora mostra informazioni su ciò che l'app stava cercando di fare con il puntatore null, ad esempio il campo in cui l'app stava tentando di scrivere o il metodo che stava tentando di chiamare. Ecco 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 anche informazioni sul contesto migliorate nei rapporti sugli arresti anomali nativi dell'app, includendo informazioni sullo stack nativo e Java.

Problemi di segnalazione

Se riscontri problemi non dovuti a problemi JNI dell'app, segnalali tramite Android Open Source Project Issue Tracker . Includi una segnalazione di adb bugreport e collega all'app nel Google Play Store, se disponibile. Altrimenti, se possibile, allega un APK che riproduca il problema.