Android Runtime (ART) e Dalvik

O tempo de execução do Android (ART) é o tempo de execução gerenciado usado por aplicativos e alguns serviços do sistema no Android. ART e seu antecessor Dalvik foram originalmente criados especificamente para o projeto Android. ART como o tempo de execução executa o formato Dalvik Executable e a especificação de bytecode Dex.

ART e Dalvik são runtimes compatíveis executando bytecode Dex, portanto, aplicativos desenvolvidos para Dalvik devem funcionar ao serem executados com ART. No entanto, algumas técnicas que funcionam no Dalvik não funcionam no ART. Para obter informações sobre os problemas mais importantes, consulte Verificando o comportamento do aplicativo no Android Runtime (ART) .

Recursos de ART

Aqui estão alguns dos principais recursos implementados pelo ART.

Compilação antecipada (AOT)

A ART apresenta a compilação antecipada (AOT), que pode melhorar o desempenho do aplicativo. O ART também possui uma verificação de tempo de instalação mais rigorosa do que o Dalvik.

No momento da instalação, o ART compila aplicativos usando a ferramenta dex2oat no dispositivo. Este utilitário aceita arquivos DEX como entrada e gera um executável de aplicativo compilado para o dispositivo de destino. O utilitário deve ser capaz de compilar todos os arquivos DEX válidos sem dificuldade. No entanto, algumas ferramentas de pós-processamento produzem arquivos inválidos que podem ser tolerados pela Dalvik, mas não podem ser compilados pelo ART. Para obter mais informações, consulte Resolvendo problemas de coleta de lixo .

Coleta de lixo aprimorada

A coleta de lixo (GC) consome muitos recursos, o que pode prejudicar o desempenho de um aplicativo, resultando em exibição instável, baixa capacidade de resposta da interface do usuário e outros problemas. O ART melhora a coleta de lixo de várias maneiras:

  • Principalmente design simultâneo com uma única pausa GC
  • Cópia simultânea para reduzir o uso e a fragmentação da memória em segundo plano
  • A duração da pausa do GC é independente do tamanho do heap
  • Coletor com menor tempo total de GC para o caso especial de limpeza de objetos recém-alocados e de curta duração
  • Melhor ergonomia da coleta de lixo, tornando as coletas de lixo simultâneas mais oportunas, o que torna os eventos GC_FOR_ALLOC extremamente raros em casos de uso típicos

Melhorias de desenvolvimento e depuração

O ART oferece vários recursos para melhorar o desenvolvimento e a depuração de aplicativos.

Suporte para perfilador de amostragem

Historicamente, os desenvolvedores têm usado a ferramenta Traceview (projetada para rastrear a execução de aplicativos) como um criador de perfil. Embora o Traceview forneça informações úteis, seus resultados no Dalvik foram distorcidos pela sobrecarga por chamada de método, e o uso da ferramenta afeta notavelmente o desempenho do tempo de execução.

O ART adiciona suporte para um perfilador de amostragem dedicado que não possui essas limitações. Isso fornece uma visão mais precisa da execução do aplicativo sem lentidão significativa. O suporte de amostragem foi adicionado ao Traceview for Dalvik na versão KitKat.

Suporte para mais recursos de depuração

O ART oferece suporte a várias novas opções de depuração, principalmente em funcionalidades relacionadas a monitoramento e coleta de lixo. Por exemplo, você pode:

  • Veja quais bloqueios são mantidos em rastreamentos de pilha e, em seguida, pule para o encadeamento que contém um bloqueio.
  • Pergunte quantas instâncias ativas existem de uma determinada classe, peça para ver as instâncias e veja quais referências estão mantendo um objeto ativo.
  • Filtre eventos (como ponto de interrupção) para uma instância específica.
  • Veja o valor retornado por um método quando ele sai (usando eventos “method-exit”).
  • Defina o watchpoint de campo para suspender a execução de um programa quando um campo específico for acessado e/ou modificado.

Detalhes de diagnóstico aprimorados em exceções e relatórios de falhas

O ART fornece o máximo de contexto e detalhes possíveis quando ocorrem exceções de tempo de execução. O ART fornece detalhes de exceção expandidos para java.lang.ClassCastException , java.lang.ClassNotFoundException e java.lang.NullPointerException . (Versões posteriores do Dalvik forneceram detalhes de exceção expandidos para java.lang.ArrayIndexOutOfBoundsException e java.lang.ArrayStoreException , que agora incluem o tamanho da matriz e o deslocamento fora dos limites, e o ART também faz isso.)

Por exemplo, java.lang.NullPointerException agora mostra informações sobre o que o aplicativo estava tentando fazer com o ponteiro nulo, como o campo no qual o aplicativo estava tentando gravar ou o método que estava tentando chamar. Aqui estão alguns exemplos típicos:

java.lang.NullPointerException: Attempt to write to field 'int
android.accessibilityservice.AccessibilityServiceInfo.flags' on a null object
reference
java.lang.NullPointerException: Attempt to invoke virtual method
'java.lang.String java.lang.Object.toString()' on a null object reference

O ART também fornece informações de contexto aprimoradas em relatórios de falhas nativos do aplicativo, incluindo informações sobre Java e pilha nativa.

Relatando problemas

Se você encontrar algum problema que não seja devido a problemas de JNI do aplicativo, informe-os por meio do Android Open Source Project Issue Tracker . Inclua um relatório de adb bugreport e um link para o aplicativo na Google Play Store, se disponível. Caso contrário, se possível, anexe um APK que reproduza o problema.