Se stai scrivendo codice nativo e hai dubbi sul suo utilizzo della memoria, è utile eseguire il profiling delle allocazioni native della tua app per scoprire se è possibile ottimizzare.
Perché dovresti eseguire il profiling della memoria dell'app
Android fornisce un ambiente di memoria gestita: quando Android stabilisce che la tua app non utilizza più alcuni oggetti, il garbage collector restituisce la memoria inutilizzata all'heap. Il modo in cui Android trova la memoria inutilizzata è in costante miglioramento, ma a un certo punto su tutte le versioni di Android il sistema deve mettere in pausa brevemente il codice. La maggior parte delle volte, le interruzioni sono impercettibili. Tuttavia, se l'app alloca la memoria più velocemente di quanto il sistema possa raccoglierla, l'app potrebbe subire un ritardo mentre il raccoglitore libera memoria sufficiente per soddisfare le tue allocazioni. Il ritardo potrebbe causare l'interruzione dei frame dell'app e una lentezza visibile.
Per informazioni sulle pratiche di programmazione che possono ridurre l'utilizzo della memoria dell'app, leggi l'articolo Gestire la memoria dell'app.
Panoramica delle allocazioni native
Quando esegui l'attività Monitora il consumo di memoria (allocazioni native), Android Studio Profiler monitora le allocazioni e le dealoazioni di oggetti in codice nativo per il periodo di tempo specificato e fornisce le seguenti informazioni:
- Allocazioni: un conteggio degli oggetti allocati utilizzando
malloc()
o l'operatorenew
durante il periodo di tempo selezionato. - Deallocations: un conteggio degli oggetti deallocati utilizzando
free()
o l'operatoredelete
durante il periodo di tempo selezionato. - Dimensioni allocazioni: le dimensioni aggregate in byte di tutte le allocazioni durante il periodo di tempo selezionato.
- Dimensioni deallocations: le dimensioni aggregate in byte di tutta la memoria liberata durante il periodo di tempo selezionato.
- Conteggio totale: il valore nella colonna Allocazioni meno il valore nella colonna Deallocations.
- Dimensione rimanente: il valore nella colonna Dimensione allocazioni meno il valore nella colonna Dimensione deallocations.
La scheda Visualizzazione mostra una visualizzazione aggregata di tutti gli oggetti correlati al codice nativo nello stack di chiamate durante l'intervallo di tempo selezionato. In sostanza, viene indicata la quantità di memoria totale utilizzata dallo stack chiamate con le istanze mostrate. La prima riga mostra il nome del thread. Per impostazione predefinita, gli oggetti vengono impilati da sinistra a destra in base alle dimensioni dell'allocazione. Utilizza il menu a discesa per modificare l'ordinamento.
Per impostazione predefinita, il profiler utilizza una dimensione del campione di 2048 byte: ogni volta che vengono allocati 2048 byte di memoria, viene acquisito uno snapshot della memoria. Una dimensione del campione inferiore consente di ottenere snapshot più frequenti, che generano dati più accurati sull'utilizzo della memoria. Un campione più grande genera dati meno accurati, ma consuma meno risorse di sistema e migliora le prestazioni durante la registrazione. Per modificare la dimensione del campione, consulta Modificare la configurazione della registrazione.