Instrumentos ObjectAlloc: Explicación de bytes activos y bytes generales


86

Estoy usando la herramienta ObjectAlloc de Instument en un intento de comprender qué hace la memoria de mi aplicación (iPhone) y cuándo y dónde lo hace.

Realmente me gustaría una explicación básica de estas estadísticas:

  • Bytes en vivo
  • #Vivo
  • #Transitorio
  • Bytes generales

Cuando intento calcular cuánta memoria está usando mi aplicación, ¿debo mirar Live Bytes o Overall Bytes? ¿Incluye esto memoria filtrada? ¿Qué son los objetos transitorios?

Gracias


6
las columnas tienen descripciones breves cuando pasa el mouse sobre sus encabezados.
Piotr Byzia

Respuestas:


110

ObjectAlloc rastrea toda la asignación y desasignación de memoria durante el tiempo que se ejecuta su programa.

El Living bytes, or Net byteses la cantidad de memoria la aplicación está utilizando en el momento de seleccionar en la línea de tiempo. Eso incluirá la memoria filtrada, ya que la memoria filtrada nunca se desasigna.

#Livinges cuántas asignaciones de cierto tamaño / tipo de objeto ocurrieron (y aún están asignadas). Esto es muy útil cuando se buscan fugas.

Por ejemplo, si realiza una acción repetidamente (como entrar y salir de un controlador de vista modal) y ve que #Livingun objeto crece en la misma cantidad cada vez, entonces probablemente esté filtrando esos objetos. Luego puede confirmar profundizando y viendo la línea exacta de código que está asignando los objetos, e incluso ver el índice de tiempo en que se creó cada uno.

Overall bytesincluye memoria que ha sido liberada. Es útil realizar un seguimiento de ese número con fines de optimización del rendimiento, pero no si solo está tratando de ver su huella de memoria actual o buscar fugas.


3
¿Qué intentaría optimizar en términos de bytes totales? ¿Tratar de mantener un número pequeño significa un mejor rendimiento?
Dan Rosenstark

4
Sí correcto. Una causa común de problemas de rendimiento es ejecutar accidentalmente el mismo código más de una vez. La herramienta Asignaciones puede ser una buena forma de darse cuenta. Por ejemplo, incluso si los objetos adicionales no se filtran, podría decir: "¿Por qué hice 3 de ese objeto? ¡Solo debería haber habido uno!"
Ken Aspeslagh

2
Live bytes es la cantidad de memoria que usa actualmente su aplicación. El total es solo un total de todas las asignaciones que ha realizado su aplicación (incluida la memoria que se ha liberado desde entonces)
Ken Aspeslagh

1
@KenAspeslagh, ¿por qué me importarían los bytes generales, si también contienen objetos liberados?
Dejell

3
Si está ajustando el rendimiento, entonces desea minimizar la cantidad de asignaciones que realiza su aplicación mientras se ejecuta (incluso si no está filtrando dichas asignaciones). Las asignaciones excesivas a menudo pueden ser un indicador de que lo está haciendo mal.
Ken Aspeslagh

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.