Recursos que consomem muita memória

A plataforma Android está baseada no princípio de que memória livre é memória desperdiçada. O Android tenta usar toda a memória disponível em todos os momentos. Por exemplo, o sistema mantém os apps na memória depois de terem sido fechados para que o usuário possa voltar a eles rapidamente. Por esse motivo, os dispositivos Android geralmente são executados com pouca memória livre. Consulte a alocação de memória do Android aqui.

O processo do daemon de low-memory killer (LMK) do Android monitora o estado da memória de um sistema Android em execução e reage à alta pressão de memória encerrando os processos menos essenciais para manter o desempenho do sistema em níveis aceitáveis.

Para decidir qual processo encerrar, o daemon do LMK usa uma pontuação de memória insuficiente chamada oom_adj_score para priorizar os processos em execução. Os processos com maior pontuação são encerrados primeiro. Os apps em segundo plano são encerrados primeiro; os processos do sistema, por último. A tabela abaixo lista as categorias de pontuação do LMK, da maior para a menor. Os itens da categoria com maior pontuação na primeira linha são encerrados primeiro:

Os processos do Android são classificados da pontuação mais alta para a mais baixa: apps em segundo plano, app anterior, app inicial,
             serviços, apps perceptíveis, app em primeiro plano, persistente, sistema e nativo.
Figura 1. Processos do Android com pontuações mais altas na parte de cima, e com pontuações mais baixas na parte de baixo.

Métrica de LMK no Android vitals

O Android vitals pode ajudar a monitorar e melhorar a taxa de LMK do seu app. Os indicadores de desempenho do Android medem apenas uma taxa de LMK: Taxa de LMK percebida pelo usuário.

A métrica reflete a porcentagem de usuários ativos por dia que tiveram pelo menos um LMK percebido pelo usuário. Um LMK percebido pelo usuário é um LMK que provavelmente foi notado pelo usuário. Por exemplo, LMKs que ocorrem quando o app está exibindo uma atividade ou sendo executado como um serviço em primeiro plano.

Você pode encontrar a métrica na seção Stability (estabilidade) no Android vitals:

Figura 2. Acesse a Taxa de LMK percebida pelo usuário no Android vitals.

Assim como outras métricas vitais, como ANRs e falhas, é possível filtrar as métricas, comparar com seus pares ou monitorar a mudança da métrica por um longo período (até três anos). Os dados estão disponíveis para apps atuais a partir de 28 de janeiro de 2025.

Figura 3. Visão geral da taxa de LMK no Android vitals.

Ferramentas de criação de perfil de memória

As ferramentas a seguir podem ajudar a encontrar e diagnosticar problemas de memória das seguintes maneiras:

  • Conferir como o app aloca memória ao longo do tempo. Você pode encontrar um gráfico em tempo real de quanta memória seu app está usando, do número de objetos Java alocados e de quando ocorre a coleta de lixo.
  • Inicie os eventos de coleta de lixo e faça uma captura de tela do heap Java enquanto o app é executado.
  • Registre as alocações de memória do app, inspecione todos os objetos alocados e confira o stack trace de cada alocação.

Memory Profiler do Android Studio

O Android Studio fornece o Memory Profiler como um componente do Android Profiler, que ajuda a identificar vazamentos e rotatividade de memória, que podem gerar oscilações, travamentos e até falhas no app. O profiler mostra um gráfico em tempo real do uso da memória pelo app e permite capturar um heap dump, forçar a coleta de lixo e rastrear a alocação de memória.

Figura 4. Visualização de referências JNI globais no Memory Profiler do Android Studio.

Ferramentas de criação de perfil de memória do Unity

Se você estiver usando o Unity Engine para criar seus apps, siga as orientações de caracterização de perfil de memória do Unity. O Unity oferece duas ferramentas para analisar o uso da memória no seu aplicativo.

O primeiro é o módulo Memory Profiler, que é um criador de perfil integrado que fornece informações básicas sobre onde o aplicativo usa a memória.

O módulo de memória mostra alocações de memória, como memória de textura e memória de malha.
Figura 5. Janela do Unity Profiler com o módulo Memory selecionado.

A segunda ferramenta é o pacote Memory Profiler, um pacote do Unity que pode ser adicionado ao projeto. O pacote adiciona uma janela adicional do Memory Profiler ao Unity Editor. O Memory Profiler permite analisar o uso da memória no seu aplicativo com ainda mais detalhes. É possível armazenar e comparar snapshots para encontrar vazamentos de memória ou conferir o layout de memória para encontrar problemas de fragmentação de memória.

Figura 6. Como analisar um instantâneo de memória usando a janela do Memory Profiler.

Insights sobre a memória do Unreal

Os apps criados pelo Unreal Engine podem usar o Unreal Memory Insights para conferir informações detalhadas sobre a alocação e a desalocação de memória, incluindo as tags de memória de baixo nível (LLM) e os callstacks associados a blocos de memória.

O sistema de consulta de insights de memória pode encontrar alocações em tempo real a qualquer momento, identificar mudanças no uso de memória, localizar vazamentos de memória e diferenciar alocações de curto e longo prazo.

A partir da UE 5.4, o Memory Insights oferece suporte ao rastreamento de memória com callstacks para projetos Android.

Rastreador de insights de memória mostrando o gráfico de memória principal, a contagem de alocação em tempo real e a contagem de eventos de alocação/liberação.
Figura 6. Rastreador de insights de memória do Unreal.

Outros recursos