Registra allocazioni native

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'operatore new durante il periodo di tempo selezionato.
  • Deallocations: un conteggio degli oggetti deallocati utilizzando free() o l'operatore delete 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.