Oracle® Solaris Studio 12.4: パフォーマンスアナライザ

印刷ビューの終了

更新: 2015 年 1 月
 
 

ヒープトレース (メモリー割り当て) データ

正しく管理されていないメモリー割り当て関数やメモリー割り当て解除関数を呼び出すと、データの使い方の効率が低下し、プログラムパフォーマンスが低下する可能性があります。ヒープトレースでは、C 標準ライブラリメモリー割り当て関数 mallocreallocvallocmemalign、および割り当て解除関数 free で割り込み処理を行うことによって、コレクタはメモリーの割り当てと割り当て解除の要求をトレースします。mmap の呼び出しはメモリー割り当てとして扱われ、これによって Java メモリー割り当てのヒープトレースイベントを記録することが可能になります。Fortran 関数 allocate および deallocate は C 標準ライブラリ関数を呼び出すため、これらのルーチンは間接的にトレースされます。

Java プログラムのヒーププロファイリングはサポートされません。

ヒープトレースデータは、次のメトリックに変換されます。

表 2-3  メモリー割り当て (ヒープトレース) メトリック
メトリック
定義
割り当て
メモリー割り当て関数の呼び出し回数
割り当てバイト数
メモリー割り当て関数の呼び出しごとに割り当てられるバイト数の合計
リーク
対応するメモリー割り当て解除関数が存在しなかったメモリー割り当て関数の呼び出し回数
リークバイト数
割り当てられたが割り当て解除されなかったバイト数

ヒープトレースデータの収集は、プログラム内のメモリーリークを特定したり、メモリーの割り当てが不十分な場所を見つける上で役立ちます。

フィルタが適用された「リーク」ビューが表示された場合、そのリークはフィルタ基準で行われたメモリー割り当てに対するリークであり、常に割り当て解除されません。リークは、フィルタリング基準では割り当て解除されない割り当てに制限されません。

dbx デバッグツールなどでは、メモリーリークは、プログラムのデータ空間内のいずれかを指しているポインタを持たない、動的に割り当てられるメモリーブロックと定義されることがあります。ここで使用されているリークの定義にはこの代替定義が含まれますが、ポインタが存在するメモリーも含まれます。