Instruments ObjectAlloc:ライブバイトと全体のバイトの説明


86

InstumentのObjectAllocツールを使用して、アプリケーション(iPhone)が実行しているメモリと、それを実行している時間と場所を理解しようとしています。

これらの統計の基本的な説明が本当に必要です。

  • ライブバイト
  • #生活
  • #Transitory
  • 全体のバイト数

アプリケーションが使用しているメモリの量を計算しようとしているとき、ライブバイトまたは全体のバイトを確認しますか?これには、リークされたメモリが含まれますか?一時的なオブジェクトとは何ですか?

ありがとう


6
ヘッダーにカーソルを合わせると、列の説明が短くなります。
Piotr Byzia 2012

回答:


110

ObjectAlloc プログラムの実行中に、すべてのメモリ割り当てと割り当て解除を追跡します。

これLiving bytes, or Net bytesは、タイムラインで選択したときにアプリケーションが使用しているメモリの量です。リークされたメモリの割り当てが解除されることはないため、これにはリークされたメモリが含まれます。

#Living特定のサイズ/オブジェクトタイプの割り当てが発生した(そしてまだ割り当てられている)数です。これは、リークを探すときに非常に役立ちます。

たとえば、アクションを繰り返し実行し(モーダルビューコントローラーから出るなど)、#Livingオブジェクトのアクションが毎回同じ量だけ大きくなることがわかった場合は、それらのオブジェクトがリークしている可能性があります。次に、ドリルダウンしてオブジェクトを割り当てているコードの正確な行を確認し、それぞれが作成された時間インデックスを確認することで確認できます。

Overall bytes解放されたメモリが含まれます。パフォーマンスを最適化する目的でその数を追跡することは有用ですが、現在のメモリフットプリントを確認したり、リークを探したりするだけの場合はそうではありません。


3
全体のバイト数に関して何を最適化しようとしていますか?数を少なくしようとすると、パフォーマンスが向上しますか?
ダンローゼンスターク2011年

4
はい正解。パフォーマンスの問題の一般的な原因は、誤って同じコードを複数回実行することです。割り当てツールは、気付くのに良い方法です。たとえば、余分なオブジェクトがリークされていなくても、「なぜそのオブジェクトを3つ作成したのですか?1つしか存在しなかったはずです!」と言うかもしれません。
Ken Aspeslagh 2012

2
ライブバイトは、アプリが現在使用しているメモリの量です。全体は、アプリが行ったすべての割り当ての合計です(その後解放されたメモリを含む)
Ken Aspeslagh 2012年

1
@KenAspeslaghリリースされたオブジェクトも含まれている場合、なぜ全体のバイトを気にするのですか?
dejell 2013年

3
パフォーマンスを調整する場合は、実行時にアプリが行う割り当ての数を最小限に抑える必要があります(割り当てがリークされていない場合でも)。割り当てが多すぎると、間違っていることを示していることがよくあります。
Ken Aspeslagh 2013年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.