 |
パフォーマンスに関する問題のもう一つの原因は、メモリに関わるものです。HPjmeterで、作成された各種類のオブジェクトの数を参照することができます。ここから、それぞれのオブジェクトが作成された場所についての情報を得ることができます。もし、ある種類のオブジェクトが予想よりもはるかに多く作成されていれば、問題の原因になっているメソッドをピンポイントで特定することができます。作成された各種類別のオブジェクトの総数を参照するには、[Metric]メニューから[Created
Objects (Count)]を選択します。その結果、次のようなウィンドウが表示されます。 |
| |
 |
| |
上の例では、最も作成頻度の高いオブジェクトはStringオブジェクトです。非常に多くのStringが作成されているため、それがどこで作成されているかを調べて、数を減らすことができないかを検討する価値があります。そうするには、Stringエントリをダブルクリックします。次のようなダイアログボックスが表示されます。 |
| |
 |
| |
上の例では、Stringクラスのsubstringメソッドと、StringBufferとIntegerクラスのtoStringで多くのStringが作成されていることがわかります。toStringの呼び出しを減らすのは難しいと考えられますが、substringの呼び出しについて詳しく調査してみてください。[Mark
to Find]を設定し、[Call Graph Tree (Call Count)]を表示してそのメソッドを探します。これを実行すると、次のようになります。 |
| |
 |
| |
このメソッドは2度呼び出されていますが、ここでは1つだけが表示されています。[Call Graph Tree]でこのメソッドを呼び出しているオブジェクトを見ると、StringTokenizerの使用によって頻繁に呼び出されていることがわかります。さらに、StringTokenizerメソッドを呼び出しているのは、CSpClassNameのappendメソッドです。つまり、このメソッドを中心にStringTokenizerの使用を減らすべきである、ということを示しています。StringTokenizerの使用を減らすと、Stringオブジェクトの作成回数も減ります。同じように、作成回数の多いオブジェクトを調査します。
プロファイルデータによっては、[Metric]メニューで、作成された各種類のオブジェクトの合計サイズをバイト単位で表示できるオプションが使用できる場合があります。このオプションを、メモリを大量に使用している大きなオブジェクトの検出に使用することができます。 |