Instruments ObjectAlloc: Explicação de Live Bytes e Bytes Gerais


86

Estou usando a ferramenta ObjectAlloc da Instument na tentativa de entender o que a memória do meu aplicativo (iPhone) está fazendo e quando e onde está fazendo isso.

Eu realmente gostaria de uma explicação básica dessas estatísticas:

  • Bytes ao vivo
  • #Vivo
  • #Transitório
  • Bytes gerais

Quando estou tentando descobrir quanta memória meu aplicativo está usando, devo olhar para Live Bytes ou Overall Bytes? Isso inclui memória perdida? O que são objetos transitórios?

obrigado


6
as colunas têm descrições curtas quando você passa o mouse sobre seus cabeçalhos.
Piotr Byzia

Respostas:


110

ObjectAlloc rastreia toda a alocação e desalocação de memória durante o tempo de execução do programa.

A Living bytes, or Net bytesé a quantidade de memória seu aplicativo está usando no momento que você selecionar na linha do tempo. Isso incluirá memória perdida, uma vez que a memória perdida nunca é desalocada.

#Livingé quantas alocações de um determinado tamanho / tipo de objeto aconteceram (e ainda estão alocadas). Isso é muito útil ao procurar vazamentos.

Por exemplo, se você realizar uma ação repetidamente (como sair de um controlador de visualização modal) e perceber que #Livingum objeto cresce na mesma quantidade a cada vez, provavelmente você está vazando esses objetos. Você pode então confirmar detalhando e vendo a linha exata de código que está alocando os objetos, e até mesmo ver o índice de tempo que cada um foi criado.

Overall bytesinclui memória que foi liberada. É útil rastrear esse número para fins de otimização de desempenho, mas não se você estiver apenas tentando ver sua pegada de memória atual ou procurar vazamentos.


3
O que você tentaria otimizar em termos de Bytes gerais? Tentar manter o número pequeno significa melhor desempenho?
Dan Rosenstark,

4
Sim, correto. Uma causa comum de problemas de desempenho é a execução acidental do mesmo código mais de uma vez. A ferramenta Alocações pode ser uma boa maneira de perceber. Por exemplo, mesmo que os objetos extras não estejam vazando, você pode dizer: "Por que fiz 3 desse objeto? Deveria haver apenas um!"
Ken Aspeslagh

2
Bytes ativos é a quantidade de memória que seu aplicativo está usando atualmente. O Geral é apenas um total de todas as alocações que seu aplicativo fez (incluindo a memória que já foi liberada).
Ken Aspeslagh

1
@KenAspeslagh, por que eu me preocuparia com os bytes gerais, se ele também contém objetos liberados?
Dejell

3
Se você estiver ajustando para desempenho, você deseja minimizar o número de alocações que seu aplicativo faz enquanto é executado (mesmo se você não estiver vazando tais alocações.) Alocações excessivas podem frequentemente ser um indicador de que você está fazendo algo errado.
Ken Aspeslagh

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.