Android runtime (ART) è il runtime gestito utilizzato da applicazioni e alcuni systemservices su Android. L’ARTE e il suo predecessore Dalvik sono stati originariamente creatispecificamente per il progetto Android. ART come il runtime esegue il formato DalvikExecutable e la specifica bytecode Dex.
ART e Dalvik sono runtime compatibili con il bytecode Dex, quindi le app sviluppate per Dalvik dovrebbero funzionare quando si esegue con ART. Tuttavia, alcunile tecniche che funzionano su Dalvik non funzionano sull’ARTE. Per informazioni sui problemi più importanti, vedere Verifyingapp comportamento sul runtime Android (ART).
ART Features
Ecco alcune delle principali funzionalità implementate dall’ART.
Ahead-of-time (AOT) compilation
ART introduce ahead-of-time (AOT) compilation, che può migliorare appperformance. L’ARTE ha anche una verifica più stretta del tempo di installazione rispetto a Dalvik.
Al momento dell’installazione, ART compila le app utilizzando lo strumento on-devicedex2oat. Questa utility accetta i file DEX come input e generaun eseguibile app compilato per il dispositivo di destinazione. L’utilità dovrebbe essere in grado dicompilare tutti i file DEX validi senza difficoltà. Tuttavia, alcuni post-processingtools producono file non validi che possono essere tollerati da Dalvik ma non possono essere compilati dall’ART. Per ulteriori informazioni, vedere Problemi di raccolta AddressingGarbage.
Migliorata garbage collection
Garbage collection (GC) è molto dispendioso in termini di risorse, che può compromettere le prestazioni di un’app,con conseguente visualizzazione instabile, scarsa reattività dell’interfaccia utente e altri problemi. L’ARTE migliora il garbagecollezione in diversi modi:
- Principalmente di progettazione simultanea con una sola GC pausa
- Concorrenti copia per ridurre sfondo memoria di utilizzo e la frammentazione
- La lunghezza del GC pausa è indipendente dalla dimensione dell’heap
- Collettore con totale inferiore GC tempo per il caso speciale di pulizia, di recente assegnati, di breve durata, oggetti
- Migliorata la procedura di garbage collection ergonomia, rendendo simultaneo di garbage collection più tempestiva, che rende
GC_FOR_ALLOC
eventi estremamente rari in casi tipici di utilizzo
Sviluppo e il debug di miglioramenti
ARTE offre un numero di caratteristiche per migliorare lo sviluppo e il debug di app.
Supporto per sampling profiler
Storicamente, gli sviluppatori hanno utilizzato Traceviewtool (progettato per l’esecuzione di tracingapplication) come profiler. Mentre Traceview fornisce informazioni utili, i suoi risultati su Dalvik sono stati distorti dal sovraccarico della chiamata per 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 ha theselimitations. Ciò fornisce una visione più accurata dell’esecuzione dell’app senzal rallentamento significativo. Il supporto di campionamento è stato aggiunto a Traceview forDalvik nella versione KitKat.
Supporto per ulteriori funzionalità di debug
ART supporta una serie di nuove opzioni di debug, in particolare nelle funzionalità relative alla raccolta di monitor e garbage. Ad esempio, puoi:
- Guarda quali blocchi sono tenuti in tracce di stack, quindi salta al thread che contiene un blocco.
- Chiedi quante istanze live ci sono di una determinata classe, chiedi di vedere le istanze e vedi quali riferimenti mantengono un oggetto vivo.
- Filtra gli eventi (come il punto di interruzione) per un’istanza specifica.
- Vedere il valore restituito da un metodo quando esce (usando gli eventi “method-exit”).
- Imposta field watchpoint per sospendere l’esecuzione di un programma quando si accede e/o si modifica un campo specifico.
Miglioramento dei dettagli diagnostici 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 di eccezione espansi per java.lang.ClassCastException
,java.lang.ClassNotFoundException
e java.lang.NullPointerException
.(Le versioni successive di Dalvik hanno fornito dettagli di eccezione espansi per java.lang.ArrayIndexOutOfBoundsException
e java.lang.ArrayStoreException
, che ora includono la dimensione dell’array e l’offset out-of-bounds, e ARTdoes 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 cercando di scrivere o il metodo che stava cercando di chiamare. Ecco alcuni esempi tipici:
java.lang.NullPointerException: Attempt to write to field 'intandroid.accessibilityservice.AccessibilityServiceInfo.flags' on a null objectreference
java.lang.NullPointerException: Attempt to invoke virtual method'java.lang.String java.lang.Object.toString()' on a null object reference
ART fornisce anche informazioni di contesto migliorate nei rapporti di crash nativi dell’app, includendo sia le informazioni Java che quelle dello stack nativo.