La piattaforma Android si basa sul presupposto che la memoria libera sia memoria sprecata. Android cerca di utilizzare sempre tutta la memoria disponibile. Ad esempio, il sistema mantiene le app in memoria dopo che sono state chiuse in modo che l'utente possa tornare rapidamente a usarle. Per questo motivo, i dispositivi Android spesso funzionano con pochissima memoria libera (vedi Allocazione della memoria Android qui).
Il processo del demone LMK (low memory killer) di Android monitora lo stato della memoria di un sistema Android in esecuzione e reagisce a un carico elevato della memoria terminando i processi meno essenziali per mantenere le prestazioni del sistema a livelli accettabili.
Per decidere quale processo terminare, il daemon LMK utilizza un punteggio di mancata disponibilità di memoria chiamato oom_adj_score per assegnare la priorità ai processi in esecuzione. I processi con un punteggio elevato vengono interrotti per primi. Le app in background vengono terminate per prime e i processi di sistema per ultimi. Nella tabella seguente sono elencate le categorie di punteggio LMK dal più alto al più basso. Gli elementi della categoria con il punteggio più alto, nella prima riga, vengono eliminati per primi:

Metrica LMK in Android vitals
Android vitals può aiutarti a monitorare e migliorare il tasso LMK della tua app. Android vitals misura un'unica percentuale di errori LMK: la percentuale di errori LMK percepiti dall'utente.
La metrica riflette la percentuale di utenti attivi giornalieri che hanno riscontrato almeno un'interruzione per memoria insufficiente (LMK) percepita dall'utente. Un errore LMK percepito dall'utente è un errore LMK che probabilmente è stato notato dall'utente. Ad esempio, le interruzioni per memoria insufficiente che si verificano quando la tua app mostra un'attività o è in esecuzione come servizio in primo piano.
Puoi trovare la metrica nella sezione Stabilità di Android vitals:

Come per altre metriche vitali di base, come ANR e arresti anomali, puoi filtrare le metriche, confrontarle con quelle di un'app simile o monitorare la variazione della metrica per un lungo periodo di tempo (fino a 3 anni). I dati sono disponibili per le app esistenti a partire dal 28 gennaio 2025.

Strumenti di profilazione della memoria
I seguenti strumenti possono aiutarti a trovare e diagnosticare i problemi di memoria nei seguenti modi:
- Scopri come la tua app alloca la memoria nel tempo. Puoi trovare un grafico in tempo reale della quantità di memoria utilizzata dalla tua app, del numero di oggetti Java allocati e del momento in cui avviene il garbage collection.
- Avvia gli eventi di raccolta dei rifiuti e acquisisci un'istantanea dell'heap Java durante l'esecuzione dell'app.
- Registra le allocazioni di memoria dell'app, ispeziona tutti gli oggetti allocati e visualizza la traccia dello stack per ogni allocazione.
Memory Profiler di Android Studio
Android Studio fornisce Memory Profiler come componente di Android Profiler, che consente di identificare perdite di memoria e svuotamento della memoria che possono causare balbuzie, blocchi e persino arresti anomali dell'app. Il profiler mostra un grafico in tempo reale dell'utilizzo della memoria della tua app e ti consente di acquisire un dump dell'heap, forzare la raccolta dei rifiuti e monitorare l'allocazione della memoria.

Strumenti di profilazione della memoria di Unity
Se utilizzi Unity Engine per creare le tue app, puoi seguire le linee guida per il profiling della memoria di Unity. Unity offre due strumenti per analizzare l'utilizzo della memoria nella tua applicazione.
Il primo è il modulo Profiler della memoria, che è un profiler integrato che fornisce informazioni di base su dove l'applicazione utilizza la memoria.

Il secondo strumento è il pacchetto Memory Profiler, che è un pacchetto Unity che puoi aggiungere al tuo progetto. Il pacchetto aggiunge un'altra finestra di Memory Profiler a Unity Editor. Memory Profiler ti consente di analizzare l'utilizzo della memoria nella tua applicazione in modo ancora più dettagliato. Puoi memorizzare e confrontare gli snapshot per trovare perdite di memoria o visualizzare il layout della memoria per trovare problemi di frammentazione della memoria.

Unreal Memory Insights
Le app create con Unreal Engine possono utilizzare Unreal Memory Insights per visualizzare informazioni dettagliate sull'allocazione e sulla deallocazione della memoria, inclusi i tag LLM (Low Level Memory) e le callstack associate ai blocchi di memoria.
Il sistema di query di Approfondimenti sulla memoria può trovare le allocazioni attive in qualsiasi momento, identificare le variazioni nell'utilizzo della memoria, individuare le perdite di memoria e differenziare le allocazioni a breve termine da quelle a lungo termine.
A partire da UE 5.4, gli Approfondimenti sulla memoria supportano il monitoraggio della memoria con gli stack chiamate per i progetti Android.
