Registrar alocações nativas

Se você estiver escrevendo código nativo e estiver preocupado com o uso de memória, é útil criar um perfil das alocações nativas do app para descobrir se há oportunidades de otimização.

Por que é necessário criar o perfil da memória do app

O Android oferece um ambiente de memória gerenciado: quando o Android determina que o app não está mais usando alguns objetos, o coletor de lixo libera a memória não utilizada de volta para a heap. A forma como o Android encontra memória não utilizada é sempre melhorada, mas em todas as versões do Android, o sistema precisa pausar brevemente o código. Na maior parte das vezes, as interrupções são imperceptíveis. No entanto, se o app alocar memória com mais rapidez do que o sistema consegue coletá-la, o app poderá ficar mais lento enquanto o coletor libera memória suficiente para atender às alocações. Esse atraso pode fazer com que o app pule frames e gere uma lentidão visível.

Para saber mais sobre práticas de programação que podem reduzir o uso de memória do app, leia Gerenciar a memória do app.

Visão geral das alocações nativas

Quando você executa a tarefa Track Memory Consumption (Native Allocations), o Profiler do Android Studio rastreia as alocações e desalocações de objetos no código nativo pelo período especificado e fornece as seguintes informações:

  • Alocações: uma contagem de objetos alocados usando malloc() ou o operador new durante o período selecionado.
  • Deallocations: uma contagem de objetos desalocados por free() ou pelo operador delete durante o período selecionado.
  • Deallocations: o tamanho agregado em bytes de todas as alocações durante o período selecionado.
  • Deallocations Size: o tamanho agregado em bytes de toda a memória liberada durante o período selecionado.
  • Total Count: o valor da coluna Allocations menos o valor da coluna Deallocations.
  • Remaining Size: o valor da coluna Allocations Size menos o valor da coluna Deallocations Size.

A guia Visualização mostra uma visualização agregada de todos os objetos relacionados ao código nativo na pilha de chamadas durante o período selecionado. Ele mostra quanta memória total o callstack com as instâncias mostradas consome. A primeira linha mostra o nome da linha de execução. Por padrão, os objetos são empilhados da esquerda para a direita com base no tamanho da alocação. Use o menu suspenso para mudar a ordem.

Por padrão, o profiler usa o tamanho de amostra de 2048 bytes: sempre que 2048 bytes de memória são alocados, um instantâneo da memória é tirado. Uma amostra menor resulta em snapshots mais frequentes, gerando dados mais precisos sobre o uso da memória. Um tamanho de amostra maior produz dados menos precisos, mas consome menos recursos do sistema e melhora o desempenho durante a gravação. Para mudar o tamanho da amostra, consulte Editar a configuração de gravação.