修正日: 07/10/23
ObjectAlloc
Performance Tools入門 その3
3. Global Allocationsタブ
各種オブジェクトのリストをテーブルで表示します。各オブジェクトが過去および現在、いくつ生成されたのかを数値およびグラフを使って表します(図4)。【図4】 Global Allocationsタブのテーブルおよびグラフ
(1) 表の見方
基本はクラス名とそのオブジェクトの数です。まずは自作のクラスに関して、適切な数のオブジェクトが生成/解放されているか、付属のオブジェクトの数が適切かについて確認してみてください。
・Category
オブジェクトの種類を表示します。オブジェクトの場合はクラス名、メモリブロックの場合は割当を行ったライブラリ名とブロックサイズ(CoreFoundation-16など)で表示します。
・Current
現在保持しているオブジェクトの数です。既に解放されたものは含みません。
・Peak
同時に確保したオブジェクトの最大数です。そのオブジェクトが最大でどれだけの数、一度に保持されていたかを示します。多くのオブジェクトを同時に保持するとメモリを圧迫しますので注意しましょう。
・Total
その時点までに作成したオブジェクトの合計です。既に解放したものも含みます。
(2) グラフの見方
Current、Peak、Totalの値を棒グラフで表示します(図4)。最も濃い色の範囲がCurrentの値、最も薄い色がTotalの値、中間の色がPeakの値です。 黄色および赤のグラフはオブジェクトの生成方法に問題がある可能性を示しています。 グラフの色は以下のパターンで変化します。
・黄色
ピークオブジェクト数/全オブジェクト数もしくは現在のオブジェクト数/ピークオブジェクト数が1/3以下の時。
・赤色
同1/10以下の時。
同時に使用しているオブジェクトが、割り当てられた総数に比べて極端に少ない場合(オブジェクトをどんどん使い捨てにしている?→生成/解放に無駄なコストがかかっている可能性)、現在使用中のオブジェクト数がピーク時に比べて極端に少ない場合(ピーク時は本当にそれだけのオブジェクトを同時に割り当てる必要があるのか?)にグラフの色が変わります。色が変化したからといって必ず問題があるというわけではありませんが、特に自作クラスのオブジェクトの場合などは気をつける必要があります。
(3) 細かい操作
・Counts are bytes
チェックするとオブジェクト数ではなくbyteサイズで表示します。
・Auto-sort
チェックすると各項目を状況に従って自動的にソートし直します。ソート順の決定は一般的なアプリケーションと同様、各テーブルのヘッダをクリックします。
・Scaleスライダー
棒グラフの長さを拡大縮小します。×1で1ピクセルが1オブジェクトとしてグラフが描画されます。×2で1ピクセル=2オブジェクトとなります。「Counts are bytes」の時は×1で1ピクセル=1バイトです。
・各行をダブルクリック
Currentの値の推移をグラフで表示出来ます。→7項 (1)