Quali sono i dettagli tecnici del runtime Android ART introdotto in Android 4.4?
Aggiornamento
Quindi avevo ragione. Comunque, ecco il video ufficiale che spiega a fondo il runtime ART:
RISPOSTA ORIGINALE
Non ho esaminato completamente il ramo della piattaforma/art (c'è molto codice) ma ecco la mia comprensione di cos'è ART e come funziona:
ART (o Android RunTime) è un nuovo runtime sperimentale che è destinato a succedere a Dalvik nel prossimo futuro. Contiene un nuovo compilatore e una nuova VM, scritti in C++ nativo invece del C della Dalvik e ha due obiettivi principali:
- Compilare il codice su due backend, uno chiamato Quick [1], che è basato su JIT e uno chiamato Portable [2], che è basato su LLVM.
- Offrono una migliore Garbage Collection (GC)
La nuova VM [3] può tradurre il bytecode Java in codice nativo (JIT) quando esegue un payload Quick ed eseguire direttamente il codice nativo (AOT) quando esegue un payload Portable.
Il payload nativo è memorizzato in un formato OAT (da dex2oat [4], che è un'applicazione a riga di comando basata su libart), che è contenuto in un oggetto dinamico ELF (un file .so). Google ha anche creato un compilatore re-targatable molto avanzato che produce una rappresentazione intermedia basata su SSA e poi va ai backend menzionati sopra [5].
Quando si installa un'applicazione (APK), dex2oat converte il bytecode Dalvik (file .odex) in codice nativo e lo memorizza in un file .oat. Così ogni applicazione ha un corrispondente file .oat (al contrario di .odex quando è su Dalvik).
ART è attualmente in fase sperimentale quindi non è consigliabile passare ad esso da Dalvik in questo momento, ma personalmente, l'unica app che non funziona per me è Quora, il resto delle applicazioni installate sul mio telefono (Whatsapp, Twitter, Facebook, XDA-Developers, ecc) funziona bene. Ho anche notato una diminuzione del consumo di memoria (anche per app), specialmente all'avvio:
Se sei uno sviluppatore di ROM, puoi modificare la variabile PRODUCT_RUNTIMES in core_minimal.mk o core_base.mk per controllare quali runtime sono disponibili all'utente.
[1] compilatore/dex/quick - platform/art - Git at Google
[2] compilatore/dex/portable - platform/art - Git at Google
[3] runtime - platform/art - Git at Google
[4] dex2oat - platform/art - Git at Google
[5] compilatore/sea_ir - platform/art - Git at Google