Tempo de execução do Android 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 tempo de execução executa o formato executável Dalvik (DEX) e a especificação de bytecode DEX.

ART e Dalvik são tempos de execução compatíveis executando bytecode DEX, portanto, os aplicativos desenvolvidos para Dalvik devem funcionar quando 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 arte

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

Compilação antecipada (AOT)

ART introduz compilação antecipada (AOT), que pode melhorar o desempenho do aplicativo. O ART também possui uma verificação do 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 aplicativo executável compilado para o dispositivo de destino. O utilitário deve ser capaz de compilar todos os arquivos DEX válidos sem dificuldade. Entretanto, 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 .

Melhor coleta de lixo

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 diversas maneiras:

  • Principalmente design simultâneo com uma única pausa de 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 recentemente alocados e de vida curta
  • 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

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

Suporte para criador de perfil de amostragem

Historicamente, os desenvolvedores usaram a ferramenta Traceview (projetada para rastrear a execução de aplicativos) como criador de perfil. Embora o Traceview forneça informações úteis, seus resultados no Dalvik foram distorcidos pela sobrecarga de chamada por método, e o uso da ferramenta afeta visivelmente 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 à amostragem foi adicionado ao Traceview para Dalvik na versão KitKat.

Suporte para mais recursos de depuração

O ART oferece suporte a uma série de novas opções de depuração, especialmente em funcionalidades relacionadas ao monitor e à coleta de lixo. Por exemplo, você pode:

  • Veja quais bloqueios são mantidos nos rastreamentos de pilha e, em seguida, vá para o thread que contém o 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. 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 nativas do aplicativo, incluindo informações de Java e de pilha nativa.

Relatar problemas

Se você encontrar algum problema que não seja causado por JNI do aplicativo, relate-o por meio do Android Open Source Project Issue Tracker . Inclua um 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.