La plataforma de Android se basa en la premisa de que la memoria disponible es memoria desperdiciada, Android intenta usar toda la memoria disponible en todo momento. Por ejemplo, el sistema guarda las apps en la memoria después de que se cierran para que el usuario pueda volver a abrirlas con rapidez. Por esta razón, a menudo, los dispositivos Android funcionan con muy poca memoria libre (consulta la asignación de memoria de Android aquí).
El proceso del daemon de optimizador de poca memoria (LMK) de Android supervisa el estado de la memoria de un sistema Android en ejecución y reacciona a la presión de memoria alta cerrando los procesos menos esenciales para mantener el rendimiento del sistema en niveles aceptables.
Para decidir qué proceso finalizar, el daemon de LMK usa una puntuación de memoria insuficiente llamada oom_adj_score para priorizar los procesos en ejecución. Primero, se cierran los procesos con una puntuación alta. Primero se deben cerrar las apps en segundo plano, mientras que los procesos del sistema son los últimos que se cierran. En la siguiente tabla, se enumeran las categorías de puntuación de LMK de mayor a menor. Primero se cierran los procesos de la categoría de mayor puntuación, que se encuentran en la fila uno:

Métrica de LMK en Android vitals
Android vitals puede ayudarte a supervisar y mejorar la tasa de LMK de tu app. Los indicadores vitales de Android miden solo una tasa de LMK: la tasa de LMK percibido por el usuario.
La métrica refleja el porcentaje de usuarios activos por día que experimentaron al menos un error de LMK percibido por el usuario. Un error de LMK percibido por el usuario es aquel que probablemente el usuario haya notado. Por ejemplo, los errores de LMK que se producen cuando tu app muestra una actividad o se ejecuta como un servicio en primer plano.
Puedes encontrar la métrica en la sección Stability de Android vitals:

Al igual que con otras métricas vitales principales, como los errores de ANR y las fallas, puedes filtrar las métricas, compararlas con las de tus pares o supervisar el cambio de la métrica durante un período prolongado (hasta 3 años). Los datos están disponibles para las apps existentes a partir del 28 de enero de 2025.

Herramientas de generación de perfiles de memoria
Las siguientes herramientas pueden ayudarte a encontrar y diagnosticar problemas de memoria de las siguientes maneras:
- Observa el modo en que tu app asigna memoria en el tiempo. Puedes encontrar un gráfico en tiempo real de la cantidad de memoria que usa tu app, la cantidad de objetos Java asignados y cuándo se produce la recolección de elementos no utilizados.
- Inicia eventos de recolección de elementos no utilizados y toma una instantánea del montón de Java mientras se ejecuta tu app.
- Registra las asignaciones de memoria de tu app, inspecciona todos los objetos asignados y observa el seguimiento de pila para cada asignación.
Generador de perfiles de memoria de Android Studio
Android Studio proporciona el Generador de perfiles de memoria como un componente de Android Profiler, que te ayuda a identificar fugas y saturación de memoria que pueden provocar inestabilidades, fallas e incluso bloqueos de apps. El generador de perfiles muestra un gráfico en tiempo real del uso de memoria de tu app y te permite capturar un volcado de montón, forzar la recolección de elementos no utilizados y realizar el seguimiento de la asignación de memoria.

Herramientas de generación de perfiles de memoria de Unity
Si usas Unity Engine para compilar tus apps, puedes seguir la guía de generación de perfiles de memoria de Unity. Unity ofrece dos herramientas para analizar el uso de la memoria en tu aplicación.
El primero es el módulo Generador de perfiles de memoria, que es un generador de perfiles integrado que te brinda información básica sobre dónde usa memoria tu aplicación.

La segunda herramienta es el paquete de Generador de perfiles de memoria, que es un paquete de Unity que puedes agregar a tu proyecto. El paquete agrega una ventana adicional del Generador de perfiles de memoria al editor de Unity. El Generador de perfiles de memoria te permite analizar el uso de memoria en tu aplicación con aún más detalle. Puedes almacenar y comparar instantáneas para encontrar fugas de memoria o ver el diseño de la memoria para encontrar problemas de fragmentación de memoria.

Estadísticas de memoria de Unreal
Las apps compiladas con Unreal Engine pueden usar Unreal Memory Insights para ver información detallada sobre la asignación y desasignación de memoria, incluidas las etiquetas de memoria de bajo nivel (LLM) y las pilas de llamadas asociadas con bloques de memoria.
El sistema de consultas de Memory Insights puede encontrar asignaciones activas en cualquier momento, identificar cambios en el uso de la memoria, ubicar fugas de memoria y diferenciar las asignaciones a corto y largo plazo.
A partir de UE 5.4, las estadísticas de memoria admiten el seguimiento de memoria con pilas de llamadas para proyectos de Android.
