ART è una procedura di installazione? O un sistema operativo? O una macchina virtuale?

4

Durante il tentativo di comprendere Android Runtime, mi sono imbattuto nella pagina di Wikipedia . Il grafico mostrato lì aggiunge alla mia confusione. Se .dex viene convertito interamente in ELF, perché ART è più necessario?

Once an application is compiled by using ART's on-device dex2oat utility, it is run solely from the compiled ELF executable; as a result, ART eliminates various application execution overheads associated with Dalvik's interpretation and trace-based JIT compilation

La mia comprensione è che ART converte .dex in ELF e il codice dovrebbe essere eseguito in modo nativo. Con ELF, è ancora coinvolta una macchina virtuale? Con ART, lo stack dell'applicazione Android è simile a -

Android Apps
-----
ART (executing ELF)
-----
Linux

Sto capendo correttamente? Dovrei vedere ART come sistema operativo che fornisce servizi all'app Android ELFed?

    
posta Lord Loh. 29.05.2015 - 00:42
fonte

2 risposte

3

Mentre il file OAT è un file ELF, non è il solito ELF eseguibile con tutto incluso il punto di accesso. In realtà ha un piccolo numero di simboli che sono all'inizio e alla fine di un blob binario che a sua volta contiene il codice eseguibile dei metodi compilati. Ora quali metodi dovrebbero essere chiamati o quando è determinato dal runtime.

Come funziona - viene caricata una classe. C'è un oggetto C ++ che rappresenta l'oggetto Java che è quella classe. Quindi viene creata un'istanza di quella classe. Questo è un altro oggetto C ++. Viene chiamato un metodo per quell'oggetto. Trovate la classe dell'oggetto e trovate il metodo entrypoint (che è il codice compilato). Quel codice chiama un altro metodo - per questo si ritorna al codice runtime, si trova un altro oggetto e la sua classe e si chiama di nuovo il nuovo metodo. Non ci sono chiamate dirette tra i metodi (che io sappia).

Tutto questo collegamento e risoluzione viene effettivamente eseguito all'avvio di ciascuna applicazione. Il materiale di Bootclasspath viene inizializzato una volta e quindi il processo viene biforcato in modo che i bambini non debbano riavviare bootclasspath (in realtà è un po 'più complesso di quello dovuto a boot.art).

Quindi ART è ancora un JVM e i file OAT sono solo alcune delle rappresentazioni intermedie di alcuni codici precompilati. Il fatto che siano file ELF non aiuta molto - potrebbe essere qualcos'altro.

P.S. In realtà il file OAT contiene anche tutti i file DEX che sono stati usati per crearlo. È necessario per costruire classi e metodi. È anche possibile eseguire l'applicazione in modalità interprete quando esegue effettivamente le istruzioni DEX direttamente.

    
risposta data 29.05.2015 - 10:48
fonte
0

ART è Runtime Android e, oltre al compilatore AOT (statico) che compila il bytecode Dalvik al codice macchina nativo, contiene anche tutti i servizi runtime che un programma Android ha bisogno di: allocatore di memoria, garbage collector, sistema di riflessione, core classes e interfacce, ecc.

    
risposta data 29.05.2015 - 08:13
fonte

Leggi altre domande sui tag