O uso da memória (RSS anônimo e espaço de troca) é uma métrica que reflete o uso da memória do app.
A memória anônima não é protegida por um arquivo no armazenamento, como alocações de heap e memória alocada por mmap. Isso captura as alocações dinâmicas de memória do app, incluindo o heap Java ou Kotlin, alocações de heap nativo não gerenciadas (em que os dados de pixel do bitmap ficam no Android 8.0 (nível da API 26) e em versões mais recentes) e pilhas de execução de linhas de execução. Embora o SO possa descartar a memória com suporte de arquivo sob pressão, ele não pode descartar a memória anônima.
O Resident Set Size (RSS) é o número total de páginas de memória (compartilhadas e não compartilhadas) usadas por um processo que são mantidas na RAM física. Uma página é considerada "compartilhada" se for acessada por mais de um processo, como apps que acessam a mesma biblioteca.
Para memória anônima, o sistema pode gravar páginas no espaço de troca (ou zRAM no Android) quando a memória está sob pressão. O sistema pode ler essas páginas de volta da troca, se necessário.
No total, o uso da memória (RSS anônimo + troca) é uma medida do número total de páginas de memória do app que não são protegidas por um arquivo no armazenamento, incluindo qualquer memória que também esteja sendo preservada pelo sistema na troca. O rastreamento do RSS anônimo + troca garante que você veja o consumo de memória verdadeiro e não removível do app.
Se o uso da memória do app estiver alto, investigue mais e corrija o problema usando as orientações desta página.
Recursos
Diagnosticar o uso da memória excessivo localmente
Para começar a diagnosticar a origem do uso da memória excessivo, capture um heap dump com a opção Gravar heap dump nas configurações do desenvolvedor, no Android Studio ou no Perfetto. Recomendamos começar capturando um heap dump localmente depois de testar as principais jornadas do usuário do app.
Recomendamos testar principalmente as seguintes jornadas do usuário:
- WebViews e sessões do navegador no app
- Rolagem infinita com muitas mídias
- Fluxos de criação e edição de recursos
Para investigar possíveis vazamentos de memória, execute as jornadas do usuário correspondentes
localmente e colete despejos de heap em diferentes estados de processo (visível,
serviço em primeiro plano e em cache) para verificar se o app libera memória depois de
ser executado em segundo plano. Para entender como esses estados de processo se correlacionam com
callbacks onTrimMemory, consulte as orientações sobre liberação de memória em resposta
a eventos.
Se você estiver depurando problemas de memória usando o Android Studio Profiler, também poderá usar a integração do LeakCanary para simplificar a detecção de vazamentos e bitmaps duplicados e otimizar o uso de imagens.
Depois de coletar o heap dump, recomendamos usar a habilidade do Android Profiler para analisar o heap dump e identificar possíveis fontes de alto uso da memória.
Habilidades do Android
Ver no GitHubCriador de perfil do Android
android skills add android-profilerConfira um exemplo de resposta das habilidades de IA:
I have completed the analysis of memory leaks and bitmap issues for [app] using the provided Perfetto trace.
Summary of Findings
The investigation identified a critical memory pressure issue caused by massive bitmap retention within the app process.
...
Recommendations for [app]
1. [Library] Image Cache Optimization:
* Review the [Library] caching strategy. Ensure that bitmaps
loaded for animations are released or downsampled when the animation is
not in the foreground.
2. Asset Resolution Audit:
* The 14.7 MB average size suggests full-screen or extremely high-density assets. Audit the [library] files in the native_home component to ensure they are not using unnecessarily large source images.
3. View Lifecycle Management:
* Investigate why 21 [LibraryImage] instances are alive simultaneously. Ensure that views in the bottom
tab are properly detached or their animations are cleared when switching between tabs.
4. Fix Surface Leaks:
* Address the Surface.release failures observed in the logs, as these can lead to both memory leaks and
native resource exhaustion.
Outros recursos para interpretar despejos de heap
Os recursos a seguir fornecem mais informações sobre como interpretar despejos de heap e depurar o uso da memória:
- Análise manual:use as orientações do Perfetto Heap Dump Explorer para aprender a navegar e interpretar visualizações de heap dump na interface do Perfetto.
- Alocações Java/Kotlin:leia Como visualizar seu primeiro heap dump do ART para conferir um tutorial detalhado sobre como analisar heap dumps do Android Runtime (ART).
- Alocações nativas:consulte a documentação do Perfetto Native Profiling para saber como coletar e analisar perfis de memória nativos (C/C++).
- Inspeção da CLI:use adb dumpsys meminfo para ter uma análise rápida do uso de memória do app em um dispositivo.
Melhorar o uso da memória
Consulte estas seções para saber mais sobre como melhorar o uso da memória do app:
- Reduzir a pegada de código e recursos do app
- Monitorar a memória disponível e o uso da memória
- Usar mais construções de código com eficiência de memória
Para orientações detalhadas sobre como corrigir problemas de memória, consulte o guia Gerenciar a memória do seu app.