Quais são os detalhes técnicos do tempo de execução do Android ART introduzido no Android 4.4?
UPDATE
Então eu estava certo. De qualquer forma, aqui's o vídeo oficial que explica em profundidade sobre o ART Runtime:
>br>ORIGINAL ANSWER
Eu tenho't examinei completamente o ramo plataforma/arte (lá's um monte de código) mas aqui's meu entendimento do que é o ART e como ele funciona:
ART (ou Android RunTime) é um novo runtime experimental que está definido para suceder ao Dalvik no futuro próximo. Ele contém um novo compilador e VM, escrito em C++ nativo ao invés do Dalvik C e tem dois objetivos principais:
- Compilar código para dois backends, um chamado Quick [1], que é baseado no JIT e outro chamado Portable [2], que é baseado no LLVM.
- Offer improved Garbage Collection (GC)
>br> A nova VM [3] pode traduzir o bytecode Java para código nativo (JIT) ao executar uma carga rápida e executar código nativo diretamente (AOT) ao executar uma carga portável.
A carga nativa é armazenada em um formato OAT (por dex2oat [4], que é uma aplicação de linha de comando baseada na libart), que está contida dentro de um objeto dinâmico ELF (um arquivo .so). Google também criou um compilador re-targatable muito avançado que produz uma representação intermediária baseada em SSA e depois vai para os backends mencionados acima [5].
Quando você instala uma aplicação (APK), o dex2oat converte o bytecode Dalvik (arquivo .odex) para código nativo e o armazena em um arquivo .oat. Então cada aplicativo tem um arquivo .oat correspondente (ao contrário de .odex quando no Dalvik).
ART está atualmente em fase experimental, então é't recomendado mudar para ele do Dalvik agora mesmo, mas pessoalmente, o único aplicativo que não funciona para mim é o Quora, o resto dos aplicativos instalados no meu telefone (Whatsapp, Twitter, Facebook, XDA-Developers, etc) funcionam bem. Também notei uma diminuição no consumo de memória (por aplicativo também), especialmente no momento do boot:
>br> Se você're um desenvolvedor ROM, você pode modificar a variável PRODUCT_RUNTIMES no core_minimal.mk ou core_base.mk para controlar quais tempos de execução estão disponíveis para o usuário.
>[1] compiler/dex/quick - plataforma/arte - Git no Google[2] compiler/dex/portable - plataforma/arte - Git no Google
[3] runtime - plataforma/arte - Git no Google
[4] dex2oat - plataforma/arte - Git no Google
[5] compiler/sea_ir - plataforma/arte - Git no Google
Artigos semelhantes
- Quais são as principais mudanças que o Android tem introduzido ao longo dos anos?
- Como prever a demanda de aplicativos móveis para um aplicativo recém introduzido
- Como aumentar a taxa de quadros do vídeo em tempo de execução
- Qual é o tempo total de execução de todos os filmes Marvel na MCU até agora lançados?