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:

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:

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.

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.

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.

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.

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.
