Tutorial Che cos’è la Dalvik Virtual Machine e la nuova ART ?

0
3160

Nel precedente articolo abbiamo parlato di che cos’è Android, oggi vogliamo parlare della Virtual Machine VM che viene utilizzata dalle applicazioni Android è la Dalvik Virtual Machine DVM.

Vi consigliamo prima di leggere gli articoli precedenti per chi non l’avesse già fatto.

 Che cos’è la Dalvik Virtual Machine ?

La Dalvik VM è una Process Virtual Machine, sviluppata appositamente per il sistema operativo Android da Dan Bornstein. Si tratta del software all’interno del quale girano le applicazioni. Come ben sappiamo le applicazioni Android vengono scritte in linguaggio Java, il quale viene poi compilato non direttamente in linguaggio macchina ma in un formato intermedio, denominato Bytecode (linguaggio intermedio, maggiormente ottimizzato rispetto al codice di alto livello. E’ un codice compilato). 

Attenzione: non si tratta dello stesso Bytecode cui siamo abituati in ambiente Java. In ambito Android non avremo dunque i file .CLASS (JVM compatible), ma file .DEX (Dalvik compatible). Questo formato è stato pensato per soddisfare le esigenze dei dispositivi mobili che, rispetto ai pc, soffrono di poca memoria e scarsa potenza di calcolo.

01-DalvikJava

Adesso facciamo un’ analisi più approfondita sulla DVM, come accennato in precedenza, l’esigenza di creare applicazioni in grado di rispondere in modo immediato all’utente è fondamentale. Con un hardware a “risorse limitate” non si può quindi fare altro che adottare tutti i possibili accorgimenti, a livello di architettura e di software, per sfruttare al massimo le risorse disponibili, e per questo è stata scelta la Dalvik Virtual Machine (DVM) in grado di eseguire codice contenuto all’interno di file di estensione .dex ottenuti, come accennato, a partire dal bytecode
Java.

Perchè utilizzare un file .DEX invece un file .CLASS?

Viene utilizzato un file compilato .DEX per risparmiare quanto più spazio possibile per la memorizzazione ed esecuzione delle applicazioni (Quasi il 50%).

Avviene dunque una conversione (in fase di compilazione) che porta i file .CLASS  a diventare file .DEX, vediamo cosa cambia:

  • un singolo file .DEX può includere più di una classe;
  • più in generale vengono eliminate le ripetizioni di codice;
  • il set di istruzioni viene modificato.

A partire da Android 2.2 (Froyo) la Dalvik utilizza un Just-In-Time Compiler che consente di migliorare le prestazioni di runtime, andando ad inserirsi tra quei metodi che si trovano a metà tra interpretazione e compilazione. Il punto di partenza è il bytecode (più in generale, un codice intermedio) il quale viene trasformato in linguaggio macchina a tempo di esecuzione. In questo modo si mantengono le caratteristiche di indipendenza dalla piattaforma e allo stesso tempo ci si avvicina alle performance offerte dai linguaggi compilati. Quest’ultimo offre prestazioni migliorate ma modifica la natura della Dalvik, che dopo la traduzione del Bytecode in linguaggio macchina, diverrà una VM hardware-specific. Inoltre, il codice tradotto verrà memorizzato nella cache per poter essere riutilizzato: ecco dunque spiegata la Dalvik cache.

Un aspetto molto importante della DVM riguarda il meccanismo di generazione del codice che viene detto register based (orientato all’utilizzo di registri) a differenza di quello della JVM detto invece stack based (orientato all’utilizzo di stack). Attraverso questo meccanismo i progettisti della DVM si aspettano, a parità di codice Java, di ridurre del 30% il numero di operazioni da eseguire.

Ma quali sono i vantaggi dell’utilizzo di una tecnica piuttosto che l’altra?

Si ottiene un minor tempo di esecuzione delle istruzioni al prezzo di una maggiore elaborazione in fase di compilazione o trasformazione. Le prestazioni possono migliorare sensibilmente a discapito di un maggior sforzo in compilazione e maggior spazio del dex generato che ormai, nei dispositivi attuali, non è più un problema. Ridurre lo sforzo a runtime è sicuramente un aspetto positivo nei dispositivi mobili.
La DVM è quindi in grado di eseguire file dex, per cui eventuali elaborazioni a runtime di informazioni che prima erano disponibili all’interno di bytecode Java non saranno più possibili.
Ultima importantissima caratteristica della DVM è quella di permettere una efficace esecuzione di più processi contemporaneamente. Come vedremo, infatti, ciascuna applicazione sarà in esecuzione all’interno del proprio processo Linux; ciò comporta dei vantaggi dal punto di vista delle performance e allo stesso tempo alcune implicazioni dal punto di vista della sicurezza.

androidvm-art

 

Dalla versione di Android 4.4 (KitKat) si parla di ART, ma che cos’è?

Con Android 4.4 KitKat è stata introdotta la possibilità di utilizzare un’alternativa alla Dalvik Virtual Machine, chiamata ART, acronimo per AndroidRunTime. si tratta di un supporto ancora sperimentale, il suo inserimento è evidentemente rivolto a quegli sviluppatori che vogliano appunto testare la compatibilità e le performance delle proprie applicazioni, con quello che diventerà uno standard in una futura versione di Android.

Che differenza c’è tra la DVM?

Come abbiamo letto sopra la Dalvik si prende in carico di svolgere diverse operazioni molto onerose sia in termini di CPU che di memoria (e quindi di batteria), la Dalvik esegue una nuova compilazione del sorgente ogni volta che un’app viene lanciata.

ART, invece, si occuperebbe di eseguire questa compilazione al momento dell’installazione dell’app.
Tagliare il set di operazioni da compiere al lancio delle app, consente di diminuire i tempi di avvio.
Tirando le somme, se i dispositivi dovranno sfruttare meno CPU e memoria, tutto si tradurrà anche in un risparmio di batteria.

Secondo le dichiarazioni di Google, già a questo punto dello sviluppo, nei test sono stati in grado di dimezzare il tempo di avvio ed esecuzione delle app provate.

Per ora i contro di ART sono :

  • Installazione più lenta perché la compilazione avviene al momento dell’installazione.
  • Le applicazioni occuperanno più spazio e questo sarà un problema per quei device senza SD aggiuntiva removibile.

Nel prossimo articolo vedremo com’è fatta l’architettura di Android analizzando tutti i servizi offerti da Android.

L’articolo vi è piaciuto? avete domande ?