修正日: 07/10/23
ObjectAlloc
Performance Tools入門 その3
1.はじめに
ObjectAllocはアプリケーションのメモリ割当活動を監視するためのアプリケーションです(図1)。CoreFoundation frameworkに組み込まれているメモリ割当統計機能を利用し、対象アプリケーションの全てのメモリの割当/解放、Objective-Cオブジェクトのcopy、retain, release, autorelease及びそのイベントのコールスタック(オプション)を記録します。それにより、対象アプリのメモリ割当パターンや傾向を調べることが出来ます(本稿ではver3.3を元に説明します)。メモリの使用状況を調査するアプリケーションとしてMallocDebugがありますが、MallocDebugはアプリケーション全体からメモリの状態を確認するのに対し、ObjectAllocは個々のオブジェクトに注目した分析を行います。従ってObjectAllocは特定のオブジェクトの増減などを監視する用途に向いています。
なおObjectAllocは本来の「オブジェクト(インスタンス)」の他にメモリブロックも検出しますが、本稿ではそれらをすべてまとめて「オブジェクト」と表記しています。
【図1】 ObjectAllocのメインウィンドウ
2. ObjectAllocの起動/調査開始
(1) 対象アプリケーションの選択
ObjectAllocを起動するとファイル選択ダイアログが表示されるので、調査したいアプリケーションを選択します。既に起動中のアプリケーションをあとから調査することはできません。一度終了してからObjectAllocを使って起動してください。
(2) 調査開始
ウィンドウ上部一番左の三角ボタンを押すとオプションを選択するシートが表示されます。(図2)OKボタンで対象アプリが起動します。起動するとウィンドウ下部のリストに結果が表示されます。
【図2】 調査実行前の設定
・Arguments
対象アプリを起動するときに渡す引数を指定します。省略できます。
・Also record CF & ObjC refernce counting
チェックすると各オブジェクトのretainおよびreleaseをチェックし、リファレンスカウントを記録します。チェックしない場合は生成と最終的な解放のみをチェックします。
・Keep backtraces
チェックするとオブジェクト生成、retain、release、解放が発生した時のコールスタックをあわせて保存します。(retainとreleaseは上記のAlso record...をチェックしてあるときのみ)
・Identify general allocations by library
チェックするとライブラリによって割り当てられたメモリブロック(最適化しにくい部分)をすべてチェックします。(図3)
【図3】 ライブラリによって割り当てられたメモリブロックをテーブルで表示
(3) 調査の停止/中断
起動するとウィンドウ上部一番左のボタンが三角から四角に変わります。四角ボタンを押すと調査が終了し対象アプリケーションが終了します。左から二番目のボタンを押すと一時停止/再開出来ます。