Enregistrer les allocations natives

Si vous écrivez du code natif et que vous êtes préoccupé par son utilisation de la mémoire, il est utile de profiler les allocations natives de votre application pour déterminer s'il est possible de l'optimiser.

Pourquoi profiler la mémoire d'une application ?

Android fournit un environnement mémoire géré. Lorsqu'Android détermine que votre application n'utilise plus certains objets, le récupérateur libère la mémoire inutilisée pour la rendre disponible. La façon dont Android détecte la mémoire inutilisée est constamment améliorée, mais toutes les versions ont un point commun : à un moment donné, le système doit suspendre brièvement votre code. La plupart du temps, ces pauses sont imperceptibles. Toutefois, si votre application alloue de la mémoire plus rapidement que le système ne peut la récupérer, son fonctionnement peut être retardé pendant que le collecteur libère suffisamment de mémoire pour satisfaire la demande. Certains frames peuvent être ignorés pendant ce délai, et votre application peut sembler lente à réagir.

Pour en savoir plus sur les pratiques de programmation permettant de réduire l'utilisation de mémoire de votre application, consultez la page Gérer la mémoire de votre application.

Présentation des allocations natives

Lorsque vous exécutez la tâche Suivre la consommation de mémoire (allocations natives), le profileur Android Studio suit les allocations et désallocations d'objets dans le code natif pendant la période que vous spécifiez, et fournit les informations suivantes:

  • Allocations: nombre d'objets alloués à l'aide de malloc() ou de l'opérateur new pendant la période sélectionnée.
  • Deallocations: nombre d'objets désalloués à l'aide de free() ou de l'opérateur delete pendant la période sélectionnée.
  • Volume alloué: l'espace mémoire cumulatif (en octets) occupé par les allocations effectuées pendant la période sélectionnée.
  • Volume désalloué: l'espace mémoire cumulatif (en octets) libéré par les désallocations effectuées pendant la période sélectionnée.
  • Nombre total: la valeur de la colonne Allocations après déduction de celle de la colonne Désallocations.
  • Volume restant: la valeur de la colonne Volume alloué après déduction de celle de la colonne Volume désalloué.

L'onglet Visualisation affiche une vue agrégée de tous les objets liés au code natif dans la pile d'appels pendant la période sélectionnée. Il indique essentiellement la quantité totale de mémoire utilisée par la pile d'appels avec les instances affichées. La première ligne indique le nom du thread. Par défaut, les objets sont empilés de gauche à droite en fonction de la taille d'allocation. Utilisez le menu déroulant pour modifier l'ordre.

Par défaut, le profileur utilise un intervalle d'échantillonnage de 2 048 octets. Chaque fois que 2 048 octets de mémoire sont alloués, une capture instantanée est enregistrée. Un intervalle réduit génère des instantanés plus fréquents et fournit des données plus précises sur l'utilisation de la mémoire. Un intervalle large fournit des données moins précises, mais consomme moins de ressources système et améliore les performances lors de l'enregistrement. Pour modifier la taille d'échantillon, consultez Modifier la configuration d'enregistrement.