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.