Runtime Android e Dalvik

Android Runtime (ART) è il runtime gestito utilizzato dalle app 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 (DEX) e la specifica del bytecode DEX.

ART e Dalvik sono runtime compatibili che eseguono bytecode DEX, quindi le app sviluppate per Dalvik dovrebbero funzionare quando vengono eseguite con ART. Tuttavia, alcune tecniche che funzionano su Dalvik non funzionano su ART. Per informazioni sui problemi più importanti, vedere Verifica del comportamento dell'app sul runtime 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 prevede inoltre una verifica dei tempi di installazione più rigorosa rispetto a Dalvik.

Al momento dell'installazione, ART compila app utilizzando lo strumento dex2oat sul dispositivo. Questa utility accetta 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 Garbage Collection .

Raccolta dei rifiuti migliorata

La Garbage Collection (GC) utilizza 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:

  • Design prevalentemente simultaneo 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 pulizia di oggetti di breve durata e recentemente assegnati
  • 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 app) 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 in fase di esecuzione.

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

Supporto per ulteriori funzionalità di debug

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

  • Scopri quali blocchi sono conservati nelle analisi dello stack, quindi passa al thread che contiene un blocco.
  • Chiedi quante istanze attive ci sono di una determinata classe, chiedi di vedere le istanze e vedi quali riferimenti mantengono attivo un oggetto.
  • Filtra gli eventi (come il punto di interruzione) per un'istanza specifica.
  • Visualizza il valore restituito da un metodo quando esce (utilizzando gli eventi "method-exit").
  • Imposta il watchpoint 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 fornisce il maggior contesto e dettaglio possibile quando si verificano eccezioni di runtime. ART fornisce dettagli estesi sulle eccezioni per java.lang.ClassCastException , java.lang.ClassNotFoundException e java.lang.NullPointerException . (Le versioni successive di Dalvik hanno fornito dettagli estesi sulle eccezioni per java.lang.ArrayIndexOutOfBoundsException e java.lang.ArrayStoreException , che ora includono la dimensione dell'array e l'offset fuori limite, e ART fa anche questo.)

Ad esempio, java.lang.NullPointerException ora mostra informazioni su ciò che l'app stava tentando di fare con il puntatore null, come il campo su 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 inoltre informazioni migliorate sul contesto nei report sugli arresti anomali nativi dell'app, includendo informazioni sia su Java che sullo stack nativo.

Segnala problemi

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