Android Runtime e Dalvik

O Android Runtime (ART) é o tempo de execução gerenciado usado por apps e alguns sistemas serviços no Android. O ART e seu antecessor, Dalvik, foram originalmente criados especificamente para o projeto Android. O ART como ambiente de execução executa o Dalvik executável (DEX) e especificação de bytecode DEX.

ART e Dalvik são ambientes de execução compatíveis que executam bytecode DEX, ou seja, os apps desenvolvidos para o Dalvik funcionarão com o ART. No entanto, alguns que funcionam no Dalvik não funcionam no ART. Para informações sobre o problemas mais importantes, consulte Verificação comportamento do app no Android Runtime (ART).

Recursos do ART

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

Compilação antecipada (AOT)

O ART introduz a compilação antecipada (AOT, na sigla em inglês), que pode melhorar o app desempenho. O ART também tem uma verificação de tempo de instalação mais rigorosa do que o Dalvik.

No momento da instalação, o ART compila apps usando a interface no dispositivo ferramenta dex2oat. Esse utilitário aceita arquivos DEX como entrada e gera um executável de app compilado para o dispositivo de destino. O utilitário deve ser capaz de compilar todos os arquivos DEX válidos sem dificuldade. No entanto, alguns componentes de pós-processamento de ferramentas produzem arquivos inválidos que podem ser tolerados pela Dalvik, mas que não podem ser compilado pelo ART. Para mais informações, consulte Como abordar 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 app. resultando em uma exibição entrecortada, baixa capacidade de resposta da interface e outros problemas. A ART melhora o lixo de várias maneiras:

  • Projeto predominantemente simultâneo com uma única pausa de GC
  • Cópia simultânea para reduzir o uso e a fragmentação de memória em segundo plano
  • A duração da pausa da GC não depende do tamanho do heap
  • Coletor com menor tempo total de GC no caso especial de limpeza objetos de curta duração alocados recentemente
  • Ergonomia de coleta de lixo aprimorada, gerando lixo simultâneo as coleções mais rapidamente, o que torna o GC_FOR_ALLOC eventos extremamente raros em casos de uso típicos

Melhorias no desenvolvimento e na depuração

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

Suporte para o criador de perfil de amostragem

Historicamente, os desenvolvedores usavam o Traceview projetada para rastrear execução de apps) como criador de perfil. O Traceview oferece informações úteis, os resultados no Dalvik foram distorcidos pela sobrecarga de chamada por método e usam da ferramenta afeta visivelmente o desempenho do ambiente de execução.

O ART adiciona suporte a um criador de perfil de amostragem dedicado que não tem essas limitações. Isso oferece uma visão mais precisa da execução do app sem uma lentidão significativa. O suporte à amostragem foi adicionado ao Traceview para Dalvik na versão KitKat.

Compatibilidade com mais recursos de depuração

O ART é compatível com várias novas opções de depuração, especialmente nas funcionalidade relacionada à coleta de lixo. Por exemplo, você pode:

  • Confira quais bloqueios são mantidos nos stack traces e vá para a linha de execução que tem um bloqueio.
  • Pergunte quantas instâncias ao vivo existem de uma determinada classe, peça para ver o instâncias e veja quais referências mantêm um objeto ativo.
  • Filtrar eventos (como ponto de interrupção) para uma instância específica.
  • Conferir o valor retornado por um método quando ele sai (usando "method-exit" ).
  • Definir um ponto de controle de campo para suspender a execução de um programa quando um determinado é acessado e/ou modificado.

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

O ART oferece o máximo de contexto e detalhes possível quando exceções de tempo de execução antes que ocorram mudanças. O ART fornece detalhes de exceção expandidos para java.lang.ClassCastException, java.lang.ClassNotFoundException, e java.lang.NullPointerException. Versões mais recentes da 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 ART também faz isso.)

Por exemplo, java.lang.NullPointerException. agora mostra informações sobre o que o app estava tentando fazer com o ponteiro nulo, como o campo em que o app estava tentando gravar ou o método em que estava tentando a chamada. Alguns exemplos:

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 oferece informações de contexto aprimoradas em relatórios de erros nativos do app, incluindo informações da pilha nativa e do Java.

Denunciar problemas

Se você tiver problemas que não são causados por JNI do app, informe por meio do Android Open Source Rastreador de problemas do projeto Inclua um adb bugreport e um link para o app na Google Play Store, se disponível. Caso contrário, se possível, anexe um APK que reproduz o problema.