Vai al contenuto

RAM smartphone Android: perché è sempre piena e come controllarla

Logo Android Developers su sfondo bianco con l'androide verde.
Foto: Google (Source: Google.)

Hai la memoria quasi tutta occupata con una sola app aperta? Su Android non è un guasto: il sistema è progettato per funzionare così. Questa guida è per chi ha uno smartphone Android e vuole capire cosa succede alla RAM, cioè perché resta piena, chi decide quali app chiudere quando la memoria scarseggia e perché le app che promettono di «liberare la RAM» non aiutano. Poi passi ai numeri, prima con la voce Memoria delle Opzioni sviluppatore e poi con adb e dumpsys, a telefono collegato al computer. Alla fine rimetti tutto com’era e trovi i minimi di RAM che Google fissa per Android 17. I comandi sono quelli della documentazione ufficiale, elencata in fondo.

Understanding Android memory usage (Google I/O '18)Il video si carica da YouTube quando premi play

Cosa serve

  • Uno smartphone Android. La spiegazione vale in generale. I percorsi delle Opzioni sviluppatore sono quelli che Google indica da Android 4.2 in poi (su Android 4.1 e precedenti la schermata è già visibile) e i requisiti di RAM in fondo sono quelli di Android 17. Le pagine di Google sono generiche: su alcuni telefoni la schermata Opzioni sviluppatore sta in un altro punto o ha un nome diverso.
  • Un computer con adb, che fa parte del pacchetto SDK Android Platform Tools. Lo installi con l’SDK Manager di Android Studio, che lo mette in android_sdk/platform-tools/, oppure scarichi il pacchetto standalone indicato nella pagina ufficiale di adb.
  • Un cavo USB per collegare il telefono al computer.
  • Il telefono sbloccato e a portata di mano, perché al primo collegamento devi confermare una richiesta sullo schermo.

Perché la RAM «piena» è normale

Android parte da un principio preciso: la memoria libera è memoria sprecata. Lo scrive la pagina di Android Developers sull’allocazione della memoria, che aggiunge che il sistema cerca di usare in ogni momento tutta la RAM disponibile. Per questo i dispositivi Android funzionano spesso con pochissima memoria libera.

Una parte di quella RAM serve a tenere pronte le app che hai chiuso. Quando esci da un’app il suo processo non viene terminato ma resta in una cache. Se ci torni, Android riusa lo stesso processo invece di ripartire da zero, e il passaggio da un’app all’altra è più veloce. Lo spiega la panoramica sulla gestione della memoria delle app.

Il numero che vedi alla voce «RAM usata» è quindi alto di proposito e da solo non vuol dire che il telefono sia in difficoltà.

Come Android libera memoria: kswapd, zRAM e low memory killer

Se la RAM viene tenuta piena, Android deve anche saperla svuotare quando serve. In gioco ci sono tre tipi di memoria. La RAM è la più veloce e anche la più limitata. La zRAM è una parte della RAM usata come spazio di swap, in cui i dati vengono compressi. Poi c’è lo spazio di archiviazione: Android evita i tradizionali file di swap su disco, a differenza di altri sistemi Linux, perché le scritture frequenti lo consumerebbero. Può però trasferirvi le pagine inattive con zRAM Writeback, con scritture limitate per contenerne l’usura.

Quando la memoria libera scende sotto una soglia bassa entra in azione kswapd, un componente del kernel Linux. Le pagine pulite, cioè le copie intatte di file già salvati, le scarta: se servono di nuovo il sistema le rilegge dall’archiviazione. Le pagine modificate private e quelle anonime, che non corrispondono a nessun file, le sposta in zRAM comprimendole. Quelle modificate condivise da più processi, invece, possono essere riscritte nel file da cui provengono. kswapd si ferma quando la memoria libera torna sopra una soglia alta. La dimensione massima della zRAM la decide il produttore del telefono.

Se questo non basta, il sistema avvisa le app che la memoria sta finendo e chiede loro di ridurre le allocazioni. Come ultima risorsa interviene il low memory killer (LMK), che chiude dei processi. A ognuno assegna un punteggio, oom_adj_score, e chiude per primi quelli con il punteggio più alto. L’ordine va da chi viene chiuso per primo a chi viene chiuso per ultimo:

  1. App in background, cioè quelle usate in precedenza e ora inattive.
  2. App precedente, l’ultima app in background che hai usato, perché è quella in cui è più probabile che torni.
  3. App Home, cioè il launcher. Se viene chiusa, sparisce lo sfondo.
  4. Servizi avviati dalle app, come sincronizzazioni o caricamenti nel cloud.
  5. App percepibili, per esempio la musica che stai ascoltando.
  6. App in primo piano, quella che stai usando: se viene chiusa, sembra che si sia bloccata.
  7. Servizi persistenti come la telefonia e il Wi-Fi, poi i processi di sistema e infine i processi nativi.

I produttori possono modificare anche questo comportamento. Dal kernel 4.12 il driver LMK è stato rimosso dal kernel upstream e il lavoro passa a lmkd, un processo che gira nello spazio utente. La documentazione AOSP su lmkd spiega che da Android 10 misura la pressione sulla memoria con i monitor PSI, cioè in base al tempo che i processi perdono aspettando memoria. Sui dispositivi con poca RAM il sistema deve tollerare come normale una pressione più alta. Su quelli ad alte prestazioni, invece, va risolta prima che pesi sulle prestazioni.

Perché le app che chiudono i processi non servono

Un’app che «svuota la RAM» chiude processi che Android teneva in cache proprio per fartele riaprire più in fretta. Quando riapri quelle app, devono ripartire da zero.

Quando la memoria serve davvero, il sistema la recupera da solo e in un ordine preciso: prima le app che non stai usando, per ultimi i servizi essenziali e i processi di sistema. La documentazione per gli sviluppatori aggiunge che i processi in cache possono essere chiusi in qualsiasi momento, secondo le necessità del sistema. È una nostra deduzione: chiudere i processi dall’esterno non fa niente che Android non faccia già da solo, e in più toglie le app dalla cache che ne rende veloce la riapertura.

Attivare le Opzioni sviluppatore e aprire la voce Memoria

Per vedere i numeri sul telefono ti servono le Opzioni sviluppatore, che da Android 4.2 sono nascoste. La guida di Android Developers sulle Opzioni sviluppatore indica dove trovare la voce Numero build sui modelli più diffusi:

Schermata delle Opzioni sviluppatore di Android con la voce Memoria in alto.
Il menu Opzioni sviluppatore Android con la voce Memoria per analizzare l’uso della RAM. — Immagine: Google (Press Corner / blog.google) (Source: Google.)
  • Google Pixel: Impostazioni > Informazioni sullo smartphone > Numero build.
  • Samsung Galaxy S8 e modelli successivi: Impostazioni > Informazioni sullo smartphone > Informazioni sul software > Numero build.
  • LG G6 e modelli successivi: Impostazioni > Informazioni sullo smartphone > Informazioni software > Numero build.
  • HTC U11 e modelli successivi: Impostazioni > Informazioni > Informazioni software > Altro > Numero build, oppure Impostazioni > Sistema > Informazioni sullo smartphone > Informazioni software > Altro > Numero build.
  • OnePlus 5T e modelli successivi: Impostazioni > Informazioni sullo smartphone > Numero build.

Tocca Numero build sette volte, finché compare il messaggio You are now a developer!. Torna alla schermata precedente e in basso trovi Opzioni sviluppatore. Lascia attivo l’interruttore in cima alla schermata, altrimenti quasi tutte le opzioni restano disabilitate.

Fra le opzioni generali c’è la voce Memoria. Mostra l’utilizzo medio della memoria, le prestazioni della memoria, la memoria totale disponibile, la memoria media usata, quanta ne resta libera e quanta ne usano le app. Poca memoria libera non è un campanello d’allarme.

Attivare il debug USB e controllare che il PC veda il telefono

I dati più dettagliati si leggono dal computer, e adb comunica con il telefono solo se il debug USB è attivo. Il percorso cambia con la versione di Android:

Schermata delle Opzioni sviluppatore con l'interruttore USB debugging attivato.
L’opzione per attivare il Debug USB all’interno delle Opzioni sviluppatore su Android. — Immagine: Google (Press Corner / blog.google) (Source: Google.)
  • Android 9 e versioni successive: Impostazioni > Sistema > Avanzate > Opzioni sviluppatore > Debug USB.
  • Android 8.0.0 e 8.1.0: Impostazioni > Sistema > Opzioni sviluppatore > Debug USB.
  • Android 7.1 e versioni precedenti: Impostazioni > Opzioni sviluppatore > Debug USB.

Attenzione: con il debug USB attivo, un computer autorizzato può mandare comandi al telefono. Da Android 4.2.2, quando colleghi il cavo compare una finestra che chiede se accettare la chiave RSA di quel computer. Accettala solo se il computer è il tuo. Nell’ultimo passaggio trovi come disattivare tutto.

Prima del collegamento, su Windows installa se serve un driver USB per ADB (la guida ufficiale rimanda ai driver dei produttori). Su Ubuntu il tuo utente deve far parte del gruppo plugdev e nel sistema devono essere installate le regole udev che coprono il dispositivo; dopo un’eventuale aggiunta al gruppo devi uscire dalla sessione e accedere di nuovo. Poi collega il telefono con il cavo e conferma la richiesta sullo schermo. Sul computer apri una finestra del terminale e spostati nella cartella android_sdk/platform-tools, quella in cui è installato adb. Da lì, su macOS e Linux scrivi ./adb al posto di adb in tutti i comandi della guida; in PowerShell usa .\adb.exe; nel Prompt dei comandi di Windows basta adb. Se la cartella platform-tools è già nel PATH, puoi usare adb direttamente. Il primo comando è:

adb devices -l

Per ogni dispositivo adb stampa il numero di serie, lo stato e, grazie all’opzione -l, una descrizione del tipo di dispositivo. Se il telefono compare con lo stato device, è collegato al server adb. Se invece compare offline, non è connesso ad adb o non risponde.

Vedere quanta memoria hanno usato le app nelle ultime 3 ore

Lo strumento dumpsys gira sul telefono e riporta lo stato dei servizi di sistema. Con il servizio procstats vedi come si sono comportate le app nel tempo: per quanta parte del tempo sono rimaste in esecuzione e quanta memoria hanno usato. Per le ultime tre ore il comando è:

adb shell dumpsys procstats --hours 3

Per ogni app trovi tre misure, ognuna nella forma minimo-media-massimo. La PSS conta la memoria privata dell’app più una quota di quella che condivide con altri processi. La USS conta solo la memoria esclusiva dell’app. La RSS conta tutte le pagine che l’app usa, condivise comprese. Se vuoi confrontare un’app con l’altra guarda la PSS: sommando le PSS di tutti i processi, nessuna pagina viene contata due volte.

In fondo all’output c’è un riepilogo per categorie. Questo è l’esempio della pagina ufficiale di dumpsys, preso da un dispositivo con avvio delle statistiche datato 2015: sul tuo telefono i numeri saranno diversi.

Memory usage:
 Kernel : 265MB (38 samples)
 Native : 73MB (38 samples)
 Persist: 262MB (90 samples)
 Top : 190MB (325 samples)
 ImpFg : 204MB (569 samples)
 ImpBg : 754KB (345 samples)
 Service: 93MB (1912 samples)
 Receivr: 227KB (1169 samples)
 Home : 66MB (12 samples)
 LastAct: 30MB (255 samples)
 CchAct : 220MB (450 samples)
 CchCAct: 193MB (71 samples)
 CchEmty: 182MB (652 samples)
 Cached : 58MB (38 samples)
 Free : 60MB (38 samples)
 TOTAL : 1.9GB

Guarda le ultime righe: su 1,9 GB totali, quelli liberi sono appena 60 MB. Una fetta consistente va alle voci che cominciano con Cch. La pagina di dumpsys non spiega queste abbreviazioni: leggerle come processi tenuti in cache è una nostra interpretazione, coerente con quello che la documentazione dice sulla cache delle app.

Per vedere le altre opzioni che procstats accetta, chiedi l’aiuto del servizio:

adb shell dumpsys procstats -h

Fotografare la memoria di una singola app con meminfo

Se procstats racconta le ultime ore, meminfo scatta una foto del momento e divide la memoria di un’app per tipo di allocazione. Questo è l’esempio della documentazione, che usa Google Maps:

adb shell dumpsys meminfo -d com.google.android.apps.maps

Prima del comando, apri Google Maps sul telefono e lascialo in esecuzione. Per esaminare un’altra app sostituisci com.google.android.apps.maps con il nome del pacchetto di quell’app, che deve essere aperta, oppure con il PID del suo processo. Il nome del pacchetto lo ricavi con il comando list packages del gestore di pacchetti pm, descritto nella pagina di adb.

L’opzione -d aggiunge i dettagli sulla memoria usata da Dalvik e ART. I valori sono in kilobyte. Secondo la documentazione le colonne da guardare per prime sono due: Pss Total, il peso complessivo dell’app in RAM, e Private Dirty, la memoria privata modificata di quell’app: recuperarla ha un costo, perché le pagine vanno conservate con la compressione in zRAM o con lo swap, oppure liberate quando non servono più. La riga TOTAL è la somma di tutte le PSS e puoi confrontarla direttamente con gli altri processi e con la RAM totale.

Usare la shell interattiva e uscirne

Se devi lanciare più comandi di fila, puoi aprire una shell direttamente sul telefono invece di scrivere ogni volta adb shell davanti. Android mette a disposizione la maggior parte dei classici strumenti a riga di comando Unix.

adb shell

Il prompt cambia, e da quel momento i comandi vengono eseguiti sul telefono. Per tornare al terminale del computer digita:

exit

In alternativa a exit puoi premere Control+D.

Tornare indietro: fermare adb, disattivare il debug USB e le Opzioni sviluppatore

Sul computer ferma il server adb, il processo che è rimasto in background per comunicare con il telefono:

adb kill-server

Questo comando non tocca il telefono né i suoi dati. Il server riparte da solo la prossima volta che lanci un comando adb.

Sul telefono l’ordine conta, perché con l’interruttore generale spento la maggior parte delle opzioni viene disabilitata:

  1. Se vuoi che il telefono dimentichi i computer autorizzati, usa per prima la voce Revoca autorizzazioni di debug adb. La pagina di adb la colloca nelle Impostazioni del dispositivo senza indicare il percorso completo, quindi cercala mentre le Opzioni sviluppatore sono ancora attive.
  2. Apri Opzioni sviluppatore e disattiva Debug USB.
  3. Infine spegni l’interruttore in cima alla schermata Opzioni sviluppatore.

Quanta RAM serve davvero: i requisiti minimi ufficiali

Le fonti ufficiali non dicono quanta RAM serva per usare bene un telefono, né se 4 GB bastino. Fissano però dei minimi. Il Compatibility Definition Document di Android 17, alla sezione 7.6.1, stabilisce per i dispositivi portatili quanta memoria deve essere disponibile per il kernel e lo spazio utente. Il conto esclude la memoria già dedicata a componenti hardware come la radio o il video. Il minimo cresce con la risoluzione dello schermo e dipende dall’ABI supportata, cioè dal tipo di codice binario che il telefono sa eseguire, a 32 o a 64 bit:

Risoluzione massima dello schermoCon almeno una ABI a 64 bitCon una sola ABI a 32 bit
fino a qHD (es. FWVGA)816 MB416 MB
fino a HD+ (es. HD, WSVGA)944 MB592 MB
fino a FHD (es. WSXGA+)1280 MB896 MB
fino a QHD (es. QWXGA)1824 MB1344 MB

Ci sono poi alcune soglie:

  • Con 1 GB o meno di memoria disponibile per il kernel e lo spazio utente, il telefono deve dichiarare il flag android.hardware.ram.low e avere almeno 1,1 GB di spazio per i dati privati delle app.
  • Oltre 1 GB deve dichiarare android.hardware.ram.normal e avere almeno 4 GB di spazio per i dati privati delle app.
  • Sotto i 2 GB deve supportare una sola ABI: solo 64 bit oppure solo 32 bit.
  • Fra 2 GB (compresi) e 4 GB, il CDD raccomanda fortemente di supportare solo lo spazio utente a 32 bit, sia per le app sia per il codice di sistema.

Sono requisiti di compatibilità, non consigli d’acquisto: indicano il minimo sotto il quale un telefono non può essere considerato compatibile con Android 17, non la quantità ideale.

Se qualcosa va storto

  • Le Opzioni sviluppatore non sono dove te le aspetti: su alcuni dispositivi la schermata sta in un’altra posizione o ha un nome diverso. Parti dalla voce Numero build del tuo modello.
  • Il telefono risulta offline: non è connesso ad adb o non risponde. Lo stato device, invece, non garantisce che Android abbia finito di avviarsi, perché il telefono si collega ad adb mentre il sistema sta ancora partendo.
  • Compare l’errore «adb: more than one device/emulator»: sono collegati più dispositivi e adb non sa a quale mandare il comando. Lascia collegato solo il telefono, oppure indica il dispositivo con l’opzione -s seguita dal numero di serie che ti ha dato l’elenco dei dispositivi. Se è collegato un solo dispositivo fisico, puoi usare l’opzione -d.
  • adb non risponde a un comando: ferma il server con adb kill-server. Riparte da solo al comando successivo.

Documentazione di riferimento

Pagine consultate il 9 novembre 2026:

Leggi anche