私は、パフォーマンスを向上させるためのアプリケーションのプロファイリングに少し慣れていません。プロファイラーとして YourKit を選択しました。YourKit が非常に興味深い統計を提供していることは間違いありません。私が立ち往生しているのは、これらの統計をどうするかということです。
たとえば、JAXB POJO で動作するメソッドを考えてみましょう。このメソッドは POJO を反復処理して、XML 内に深くネストされたタグ/要素にアクセスします。これには、以下に示すように、要素/タグに到達するために 4 層の for ループが必要です。
List<Bundle> bundles = null;
List<Item> items = null;
for(Info info : data) {
bundles = info.getBundles();
for(Bundle bundle : bundles) {
items = bundle.getItems();
//.. more loops like this till we get to the required element
}
}
YourKit は、上記のコードが「ホットスポット」であり、このコードを含むメソッドへの呼び出しごとに 80 個のオブジェクトがガベージ コレクションを取得していることを教えてくれます。上記のコードは単なる例であり、私が行き詰まっている唯一の部分ではありません。ほとんどの場合、プロファイラーから提供された情報をどう処理すればよいかわかりません。上記のコードで一時オブジェクトの数を減らすにはどうすればよいですか? アプリケーションのパフォーマンスを改善するための明確に定義された原則はありますか? アプリケーションのプロファイルを作成する際に探すべき統計と、それぞれの種類の統計にはどのような意味がありますか?
編集: アプリケーションのプロファイリングの主な目的は、スループットと応答時間を向上させることです。現在のスループットは、必要なスループットのわずか 10% です。