Google 致力于为黑人社区推动种族平等。查看具体举措
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Android Runtime (ART) e Dalvik

Il runtime Android (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 Dalvik Executable 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 girano con ART. Tuttavia, alcune tecniche che funzionano su Dalvik non funzionano su ART. Per informazioni sui problemi più importanti, vedere Verifica del comportamento delle app nel runtime Android (ART) .

Caratteristiche ART

Ecco alcune delle principali funzionalità implementate da ART.

Compilazione anticipata (AOT)

ART introduce la compilazione in anticipo (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 utility 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 Garbage Collection .

Raccolta dei rifiuti migliorata

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

  • Una pausa GC invece di due
  • Elaborazione parallela durante la pausa GC rimanente
  • Collettore con tempo GC totale inferiore per il caso speciale di pulizia di oggetti allocati di recente e di breve durata
  • Ergonomia della garbage collection migliorata, che rende più tempestive le garbage collection simultanee, il che rende GC_FOR_ALLOC eventi GC_FOR_ALLOC estremamente rari nei casi d'uso tipici
  • Compattazione del GC per ridurre l'utilizzo e la frammentazione della memoria in background

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 dell'applicazione) come profiler. Sebbene Traceview fornisca informazioni utili, i suoi risultati su Dalvik sono stati distorti dal sovraccarico per chiamata di 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ò fornisce 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ù funzionalità 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 contenuti 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 attivo un oggetto.
  • Filtra gli eventi (come il punto di interruzione) per un'istanza specifica.
  • Vedere il valore restituito da un metodo quando esce (utilizzando gli eventi "method-exit").
  • Imposta il punto di controllo del campo per sospendere l'esecuzione di un programma quando si accede a un campo specifico e / o lo si modifica.

Dettagli diagnostici migliorati nelle eccezioni e nei rapporti sugli arresti anomali

ART fornisce più contesto e dettagli possibili 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 fornivano 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 anche ART lo fa.)

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

Segnalazione di problemi

Se riscontri problemi non dovuti a problemi JNI dell'app, segnalali tramite il Tracker dei problemi del progetto Android Open Source . Includere una adb bugreport e un collegamento all'app in Google Play Store, se disponibile. Altrimenti, se possibile, allega un APK che riproduca il problema.