Qual è la differenza tra ART e Dalvik in Android?
Dalle sue prime versioni di rilascio, come "Cupcake" (1.5) e "Donut" (1.6), fino all'attuale "KitKat" (4.4), Android ha mantenuto un'architettura a strati. Partendo dal basso, comprende: "Linux Kernel", "Librerie e Android Runtime", "Application Framework", e "Application".
Ogni applicazione Android gira sulla propria macchina virtuale (VM), che si chiama "Dalvik". In Android 4.4, insieme a Dalvik, Google ha sperimentalmente introdotto un nuovo Android Runtime chiamato "ART". Gli utenti Android possono facilmente passare tra Dalvik e ART in "Impostazioni" / "Opzioni sviluppatore" / "Seleziona runtime", in cui un dialogo mostra. ART è attualmente rilasciato a scopo di esperimento e prova. In questo momento si possono riscontrare problemi e persino crash dell'app. Lo sviluppo attivo e i lavori di ottimizzazione sono ancora in corso. Ma Google è molto chiaro: ART sostituirà alla fine Dalvik come runtime di Android.
Nelle sezioni seguenti, daremo un'occhiata da vicino alle differenze tra i due runtime di Android.
AOT vs JIT
Le applicazioni Android si presentano nel formato file .apk, con classi Java convertite in bytecode DEX. Il formato DEX bytecode è indipendente dall'architettura del dispositivo e deve essere tradotto in codice macchina nativo per essere eseguito sul dispositivo. Questo è lo stesso per entrambi i runtime ART e Dalvik.
Il cambiamento più significativo da Dalvik ad ART è che Dalvik è basato sulla compilazione Just-in-Time (JIT), mentre ART è basato sulla compilazione Ahead-of-Time (AOT).
Con il compilatore Dalvik JIT, ogni volta che l'applicazione viene eseguita, traduce dinamicamente una parte del bytecode Dalvik in codice macchina. Man mano che l'esecuzione procede, più bytecode viene compilato e messo in cache. D'altra parte, ART è dotato di un compilatore Ahead-of-Time. Durante la fase di installazione dell'app, traduce staticamente il bytecode DEX in codice macchina e lo memorizza nella memoria del dispositivo. Questo è un evento una tantum che avviene quando l'app viene installata sul dispositivo.
Performance
Il vantaggio più importante del runtime ART rispetto al runtime Dalvik è che l'app gira più velocemente su ART. Poiché il bytecode DEX è stato tradotto in codice macchina durante l'installazione, non è necessario un tempo extra per compilarlo durante il runtime. L'app si avvia più velocemente anche quando viene lanciata con ART per lo stesso motivo.
Perché Dalvik richiede memoria extra per la cache del codice JIT, un'app occupa un'impronta di memoria più piccola quando gira su ART.
L'autonomia della batteria
Con Dalvik runtime, la compilazione JIT è legata alla CPU. Grazie alla compilazione AOT, ART libera la CPU dal tradurre il bytecode DEX in codice macchina durante l'esecuzione dell'app, riducendo così il consumo energetico. L'uso di ART porta a una maggiore durata della batteria, che è l'intervallo di tempo in cui è necessario ricaricare la batteria.
Tempo di installazione
Perché il compilatore AOT traduce il bytecode DEX in codice macchina durante l'installazione dell'app, un'app richiede più tempo per essere installata su un dispositivo con ART runtime. Considerando i benefici di un'esecuzione più veloce e di un tempo di lancio più breve che abbiamo discusso nella sezione precedente, questo tempo extra che avviene solo una volta durante l'installazione dell'app ne vale la pena.
Impronta di archiviazione
Con ART runtime, il compilatore AOT traduce il bytecode DEX dell'app in codice macchina e lo archivia nella memoria del dispositivo. Il binario precompilato occupa più spazio del bytecode DEX. Quindi risulta in un'impronta di memoria più grande rispetto al runtime Dalvik.