Android 4.4 KitKat: il nuovo Runtime Compiler ART

6 novembre 201326 commenti
Con Android 4.4 KitKat, Google ha introdotto ART , Runtime Compiler che dovrebbe incrementare sensibilmente le prestazioni dell'OS. ART è ancora in fase sperimentale e non è ancora integrato completamente nel sistema, tuttavia, tramite le opzioni di sviluppo è possibile abilitarlo. Vediamo quindi le differenze fra l'attuale compilatore Dalvik e ART.

Per spiegare quali sono le reali differenze fra ART e Dalvik è necessario fare un passo indietro e spiegare cosa sono realmente gli APK, qual è la loro struttura e in che modo vengono “letti” dal sistema.

Ogni APK fondamentalmente è un archivio zip, all’interno del quale sono presenti:

  • Firma del pacchetto ( Cartella META-INF)
  • Resources ( cartella Res: contiene tutta la parte dell’applicazione inerente alla grafica, quindi layouts XML, PNG relativi a pulsanti, icone e background, stringhe, attributi e stili)
  • Classes.dex ( l’eseguibile Dalvik, all’interno del quale è presente il codice Java vero e proprio)

Android utilizza la Dalvik Virtual Machine ( o Dalvik VM) per eseguire il suddetto Classes.dex.
Ogni volta che la DVM processa un .dex, questo viene convertito e “immagazzinato” nella cache Dalvik e successivamente eseguito. Per ottimizzare i tempi di esecuzione, la Dalvik VM utilizza anche file Odex. Questi file non sono altro che una versione “pre-processata” del Classes.dex presente nell’APK. Il vantaggio dell’utilizzo di file Odex è che non solo rende più rapida l’esecuzione dell’applicazione ma riduce sensibilmente anche la quantità di cache Dalvik generata.

E’ proprio dai file Odex che iniziamo a parlare di ART (Android RunTime). Con Android 4.4 KitKat, Google ha iniziato l’integrazione di questo nuovo sistema, probabilmente anche grazie al team di Flexycore, recentemente acquisito dalla società  . Al momento le informazioni su questo nuovo sistema sono davvero minime purtroppo ma elencherò tutte le informazioni emerse fino ad ora.

ART è un nuovo Runtime che non analizzerà i file Odex, bensì file Oat. I primi benchmark hanno dimostrato che ART è in grado di dimezzare(quasi) i tempi di elaborazione dei dati, con conseguente incremento delle prestazioni del sistema.

Schermata del 2013-11-06 11:06:41

 

Quelli che vedete sopra sono i risultati dell’analisi di Array di Integers (numeri interi), contenenti da 1000 sino a 100.000 elementi utilizzando Dalvik VM, ART e JNI. Va sottolineato che i test sono stati eseguiti in un emulatore, e questo ha portato ad alcuni picchi, mentre, come dimostrato Qui  , su un dispositivo i risultati sono decisamente più costanti. Molti, guardando questo grafico si chiederanno perchè a questo punto, Android non utilizza JNI (Java Native Interface). Ebbene, JNI consente al codice Java di richiamare codice nativo, scritto in linguaggi diversi da Java ( C, C++, Assembly) specifico per ogni Sistema Operativo, e questo comporta anche l’alta probabilità che, su diversi dispositivi/OS, il metodo nativo dichiarato nel codice java non venga eseguito. In sostanza, JNI non è utilizzabile perchè porterebbe ad instabilità e incompatibilità .

Allo stato attuale, tramite le impostazioni per sviluppatori, è in grado di eseguire lo switch fra Dalvik e ART runtime. Quando si esegue lo switch fra questi 2 , Android eseguirà anche lo switch fra libdvm.so e libart.so. Stando ai sorgenti inoltre, in Android 4.4 è presente anche il binario dex2oat, il quale si occuperà di convertire tutti i file Odex in Oat.

Schermata del 2013-11-06 11:31:27

 

I primi risultati di questo nuovo compiler sono molto promettenti. Non ci resta che attendere le prossime release Android per vederne il vero potenziale.

  • Fred

    VOGLIAMO ANDREA GALEAZZI!!!

  • Pingback: Abdroid 4.4 KitKat: il nuovo Runtime Compiler ART | Crazyworlds

  • MJ

    grazie per questo articolo. l’ho trovato molto interessante.

  • cerico76

    Finalmente un bell’articolo! Complimenti!

  • Alessandro Pisano

    ho letto l’articolo sul forum ufficiale google, ho delle buone conoscenze ma vorrei capirne un po di più per comprendere bene cosa tutto accade li sotto…
    comunque, articolo interessante, quoto.
    sicuramente ci voleva una svolta, ho sempre trovato la dalvik pesante, è il problema principale di android rispetto alla concorrenza…

  • mirko88

    Azz per me e arabo :( non ne capisco quasi nulla di ste cose …. sti termini cmq ok tanto il note 2 verrà lasciato nel cassetto e nn aggiornato da samsung a quanto pare …….

    • http://www.nokioteca.net/home/forum/index.php/user/341480-rikkardo92/ Rikkardo92

      Ma che cacchio dici LOL

    • Guest

      ‘A quanto pare’ cosa, hanno fatto un bel po di articoli sull’aggiornamento del Note 2, e si è sicuri che sarà aggiornato.

  • Pingback: Abdroid 4.4 KitKat: il nuovo Runtime Compiler ART - WikiFeed

  • Michele Ceccarelli

    Esaustivi…bravi e speriamo ART diventi operativo quanto prima.

  • Antonio Bonifacio

    Avreste dovuto precisare che JNI viene usato eccome in Android a livello di singole apps (soprattutto giochi) tramite librerie che richiamano funzioni native e non scritte in Java, che vanno quindi compilate per ogni OS/processore che si vuole supportare: quello che invece fa ART è ricompilare al volo tutto (o quasi) il codice Java delle applicazioni (infatti è un JIT basato su LLVM) per rendere più veloce l’esecuzione di Java stesso senza costringere lo sviluppatore ad appoggiarsi a linguaggi esterni e a basso livello come C/C++ per le porzioni di codice più pesanti dal punto di vista delle prestazioni…

    • cionci

      Non c’è solo LLVM in ART. Lavora in due modalità: portable e quick.
      La modalità portable sfrutta LLVM come linguaggio intermedio (poi compilato in linguaggio macchina con mclinker), la modalità quick invece lavora direttamente nel linguaggio macchina ospite (sono supportati x86, ARM e mips, tutti a 32 bit).
      Secondo me in entrambe le modalità non si può parlare di JIT perché non c’è più una macchina virtuale che inizia ad eseguire il codice, ma il codice viene compilato prima di essere eseguito.

      I file OAT sembrano essere un contenitore per le APK che rende più agevole il lavoro di analisi. Non escludo che alla fine dei giochi questo possa anche contenere codice LLVM o nativo, senza bisogno di compilazione on the fly.

      Il runtime contiene una implementazione JNI delle API Java. Probabilmente l’uso di JNI rende più semplice il lavoro di traduzione.

  • shishimaru

    Avevo letto altrove che, abilitando ART, il sistema va totalmente in crash e non potrebbe neppure essere avviato. Onestamente, mi pareva una cosa un po’ esagerata, ma non so.

    • Maelstrom

      alsune applicazioni vanno in crash abilitando ART, ne sono un esempio le gapps AOSP, whatsapp e titanium backup, per ovviare alle gapps #Gn0me di xda è riuscito a modificare le gapps portandole dalla rom leakata del nexus 5 ed è possibile effettivamente abilitare ART anche sulle rom AOSP…però è ancora tutto troppo sperimentale e molte applicazioni di terze parti neanche si instalano :)

      • zum

        Mmmh io sono su CM11 temasek con art attivato e tutte le 200+ app che ho funzionano, in particolare whatsapp e titanium pro. Alcune gapps *talvolta* vanno in fc, è capitato 3-4 volte in due settimane. Quello che ho notato è la durata della batteria a mio avviso migliorata nettamente, arrivo a 36 ore di contro le 20 precedenti (90% in standby ma con connettività sempre attiva).

  • Angelo Casarino

    Molto interessante e chiaro. Bell’articolo.

  • giacomofurlan

    In realtà Android utilizza il JNI… le parti scritte con l’NDK infatti non girano sotto la Dalvik.

  • giacomofurlan

    Comunque quel grafico non rappresenta l’analisi di array di interi, bensì la performance, in millisecondi, dell’algoritmo quick sort (uno dei più semplici e famosi) per riordinare (in questo caso) i numeri. Da lì si può effettuare un’analisi, ma non è un’analisi di per sé.

  • giacomofurlan

    Ultimo commento: Art non è un compilatore, ma una nuova virtual machine. Il “compilatore” semplicemente converte i file dex (compilati per la Dalvik) in file oat (compilati per Art).

    • cesco89

      http://source.android.com/devices/tech/dalvik/art.html
      “ART is a new Android runtime being introduced experimentally in the 4.4 release.”

      http://www.xda-developers.com/android/new-runtime-compiler-in-android-4-4/
      “BREAKING: New Runtime Compiler in Android 4.4 to Possibly Bring Better Performance in Future Releases”

      Non aggiungo altro B)

      • giacomofurlan

        Le virtual machine eseguono in real time (JIT) codice parzialmente compilato e quindi prima devono pre-compilarselo. Ma Art non è un compilatore, ma una VM, quindi non è tecnicamente un compiler. Al suo interno è presente un compiler, ma è riduttivo chiamarlo tale. Tra l’altro non credo neanche che tutte le VM abbiano un compilatore integrato (non vorrei dire una fesseria, ma dubito che la VM .NET ce l’abbia).

        • cionci

          Art è un compilatore, non ha una virtual machine.
          Il codice LLVM della modalità portable viene tradotto in linguaggio macchina da mclinker.

          E sì, .Net, almeno su Windows, ha il JIT ;-)

          • giacomofurlan

            Quindi Art compila completamente le applicazioni in linguaggio macchina e le fa eseguire in modo nativo sotto forma di file OAT? Così fosse dovrebbe girare meglio o come JNI, ti pare?

          • cionci

            Mi manca ancora qualche tassello sinceramente, ho guardato il sorgente per pochi minuti. L’OAT non dovrebbe essere eseguito direttamente, ma dovrebbe venire preso, spacchettato, eventualmente compilato e linkato per essere eseguito direttamente in linguaggio macchina. Nella cache di ART ci dovrebbe essere solo codice in linguaggio macchina.

  • Pingback: Android 4.4 KitKat: il nuovo Runtime Compiler ART - WikiFeed

  • Pingback: ART è pronto a sostituire Dalvik? Sì, secondo un commit nell’AOSP – Androidiani