ObjectAlloc Instruments: Explication des octets actifs et des octets globaux


86

J'utilise l'outil ObjectAlloc d'Instument pour tenter de comprendre ce que fait la mémoire de mon application (iPhone) et quand et où elle le fait.

J'aimerais vraiment une explication de base de ces statistiques:

  • Octets en direct
  • #Vivant
  • #Transitoire
  • Octets globaux

Lorsque j'essaie de déterminer la quantité de mémoire utilisée par mon application, dois-je examiner les octets actifs ou les octets globaux? Cela inclut-il une fuite de mémoire? Que sont les objets transitoires?

Merci


6
les colonnes ont de courtes descriptions lorsque vous survolez leurs en-têtes.
Piotr Byzia le

Réponses:


110

ObjectAlloc effectue le suivi de toutes les allocations et désallocations de mémoire pendant la durée de l'exécution de votre programme.

Il Living bytes, or Net bytess'agit de la quantité de mémoire utilisée par votre application au moment de la sélection dans la chronologie. Cela inclura la mémoire perdue, car la mémoire perdue n'est jamais désallouée.

#Livingest le nombre d'allocations d'une certaine taille / type d'objet qui se sont produites (et sont toujours allouées). Ceci est très utile lors de la recherche de fuites.

Par exemple, si vous effectuez une action de manière répétitive (comme entrer dans un contrôleur de vue modale) et que vous voyez qu'un #Livingobjet croît de la même quantité à chaque fois, alors vous perdez probablement ces objets. Vous pouvez ensuite confirmer en explorant vers le bas et en voyant la ligne de code exacte qui alloue les objets, et même voir l'index temporel de chaque création.

Overall bytesinclut la mémoire qui a été libérée. Il est utile de suivre ce nombre à des fins d'optimisation des performances, mais pas si vous essayez simplement de voir votre empreinte mémoire actuelle ou de rechercher des fuites.


3
Qu'essaieriez-vous d'optimiser en termes d'octets globaux? Essayer de garder le petit nombre signifie de meilleures performances?
Dan Rosenstark

4
Oui correct. Une cause fréquente de problèmes de performances est l'exécution accidentelle du même code plusieurs fois. L'outil Allocations peut être un bon moyen de le remarquer. Par exemple, même si les objets supplémentaires ne sont pas divulgués, vous pourriez dire: «Pourquoi ai-je fait 3 de cet objet? Il n'y en aurait jamais eu qu'un!
Ken Aspeslagh

2
Les octets en direct correspondent à la quantité de mémoire utilisée par votre application. Le global n'est qu'un total de toutes les allocations que votre application a faites (y compris la mémoire qui a depuis été libérée.)
Ken Aspeslagh

1
@KenAspeslagh pourquoi devrais-je me soucier des octets globaux, s'il contient également des objets libérés?
Dejell

3
Si vous optimisez les performances, vous souhaitez minimiser le nombre d'allocations effectuées par votre application lors de son exécution (même si vous ne divulguez pas lesdites allocations.) Des allocations excessives peuvent souvent indiquer que vous vous trompez.
Ken Aspeslagh

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.