blob: d87732dcedc9d3e7dea96934269e915f05d400b7 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
Copyright (c) 2009, 2010, 2011, Oracle and/or its affiliates. All rights reserved.
-->
<html>
<head>
<title>NetBeans IDEでのJavaアプリケーションのプロファイリングの概要</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
<meta name="description" content="An introduction to profiling an application using NetBeans IDE">
<link rel="stylesheet" type="text/css" href="../../../netbeans.css">
</head>
<body>
<a name="top"></a>
<h1>NetBeans IDEでのJavaアプリケーションのプロファイリングの概要</h1>
<p>NetBeans IDEには、アプリケーションの実行時動作に関する重要な情報を提供できる強力なプロファイリング・ツールが含まれています。NetBeansプロファイリング・ツールを使用すると、IDE内からスレッドの状態、CPUパフォーマンス、およびアプリケーションのメモリー使用状況を容易にモニターすることができ、しかも比較的低いオーバーヘッドしかかかりません。</p>
<p>この入門ドキュメントは、IDEに含まれているプロファイリング・ツールの概要であり、NetBeansプロジェクトのプロファイリングをすばやく開始するのに役立つガイドです。このドキュメントは、IDEで使用できる様々なプロファイリング・タスクと、プロジェクトをプロファイリングしたときに得られるプロファイリング結果を示すことを目的としています。IDEに含まれているすべてのプロファイリング機能を対象としているわけではなく、またアプリケーションで発生する可能性のある特定のパフォーマンスの問題を解決するためにプロファイリング結果を解釈する方法を説明しているわけでもありません。</p>
<p>このドキュメントでは、プロファイリング・ツールを使用して、IDEに含まれている単純なJavaアプリケーションであるAnagram Gameサンプル・アプリケーションに関するプロファイリング・データを取得します。Anagram Gameは非常に単純なJavaアプリケーション・プロジェクトですが、より大規模で複雑なJavaアプリケーションや、Webおよびエンタープライズ・アプリケーション・プロジェクトをプロファイルする場合も同じ手順に従います。</p>
<p>このドキュメントでは、IDEを使用してアプリケーションをプロファイルし、次のプロファイリング結果を取得する方法を示します。</p>
<ul>
<li>アプリケーションの実行時動作</li>
<li>アプリケーションのメソッドによって使用されたCPU時間</li>
<li>オブジェクト作成</li>
</ul>
<p>さらに、このドキュメントでは、プロファイリング結果のスナップショットを作成して比較する方法も示します。</p>
<img alt="このページの内容は、NetBeans IDE 6.9、7.0、7.1および7.2に適用されます" class="stamp" src="../../../images_www/articles/70/netbeans-stamp-70-71-72.gif" title="このページの内容は、NetBeans IDE 6.9、7.0、7.1および7.2に適用されます" />
<p><b>目次</b></p>
<ul class="toc">
<li><a href="#firsttime">初めてのプロファイリング</a>
<ul class="toc">
<li><a href="#create">サンプル・プロジェクトの作成</a></li>
<li><a href="#calibrate">初めてのプロファイラの使用</a></li>
</ul>
</li>
<li><a href="#select">プロファイリング・タスクの選択</a>
<ul class="toc">
<li><a href="#monitor">アプリケーションのモニター</a></li>
<li><a href="#cpu">アプリケーション・パフォーマンスの解析</a>
<li><a href="#memory">メモリー使用状況の解析</a></li>
</ul>
</li>
<li><a href="#snapshot">スナップショットの作成</a>
<ul class="toc">
<li><a href="#takesnap">メモリー・スナップショットの作成と比較</a></li>
</ul>
</li>
</ul>
<h2>開始</h2>
<div class="indent">
<h3>前提条件</h3>
<p>このドキュメントは、次のテクノロジについて基本的な知識またはプログラミング経験を持つ読者を想定して書かれています。</p>
<ul>
<li>Javaプログラミング</li>
<li>NetBeans IDE</li>
</ul>
<h3>チュートリアルに必要なソフトウェア</h3>
<p>このチュートリアルでは、コンピュータに次のソフトウェアをインストールしておく必要があります。</p>
<table>
<tbody>
<tr>
<th class="tblheader" scope="col">ソフトウェアまたはリソース</th>
<th class="tblheader" scope="col">必須バージョン</th>
</tr>
<tr>
<td class="tbltd1"><a href="https://netbeans.org/downloads/index.html">NetBeans IDE</a></td>
<td class="tbltd1">6.9、7.0、7.1、7.2</td>
</tr>
<tr>
<td class="tbltd1"><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Java Development Kit (JDK)</a></td>
<td class="tbltd1">バージョン6または7</td>
</tr>
</tbody>
</table>
<p class="notes"><strong>注意:</strong></p>
<ul>
<li>プロファイリング・ツールはNetBeans IDEにバンドルされているため、アプリケーションのプロファイリングを開始するための特殊な設定は必要ありません。</li>
</ul>
</div>
<a name="firsttime"></a>
<h2>初めてのプロファイリング</h2>
<p>初めてプロファイリング・ツールを使用する場合は、正確なプロファイル結果が得られるようにするとともに、このツールをプロジェクトに統合するために、IDEでいくつかの初期操作を実行する必要があります。これを示すために、まずAnagramGameプロジェクトを作成し、次に調整を実行します。AnagramGameプロジェクトを初めてプロファイルすると、IDEによって自動的に統合が実行されます。</p>
<div class="indent">
<a name="create"></a>
<h3>サンプル・プロジェクトの作成</h3>
<p>このドキュメントでは、Anagram Gameサンプル・アプリケーションをプロファイルします。これを行うには、まず新規プロジェクト・ウィザードを使用してサンプル・アプリケーションを作成し、プロジェクトをメイン・プロジェクトとして設定します。</p>
<p>Anagram Gameアプリケーションを作成するには、次の手順を実行します。</p>
<ol>
<li>メイン・メニューから「ファイル」>「新規プロジェクト」([Ctrl]-[Shift]-[N]、Macの場合は[&#8984]-[Shift]-[N])を選択します。</li>
<li>新規プロジェクト・ウィザードで、「サンプル」>「Java」カテゴリを選択します。</li>
<li>Anagram Gameプロジェクトを選択します。「次」をクリックします。</li>
<li>プロジェクトの場所を指定します。「終了」をクリックします。
<p>「終了」をクリックすると、IDEによってAnagram Gameサンプル・プロジェクトが作成されます。</p>
</li>
<li>メイン・メニューから「実行」>「メイン・プロジェクトとして設定」>「AnagramGame」を選択します。</li>
</ol>
<p>プロジェクトをメイン・プロジェクトに設定すると、Anagram Gameプロジェクトの名前が太字で「プロジェクト」ウィンドウに表示されます。デフォルトでは、IDEを使用してプロジェクトをプロファイルすると、IDEによってメイン・プロジェクトがプロファイルされます。メイン・プロジェクトとして設定されたプロジェクトがない場合、IDEでは、「プロジェクト」ウィンドウで選択されたプロジェクトがプロファイルされます。</p>
<a name="calibrate"></a>
<h3>初めてのプロファイラの使用</h3>
<p>正確なプロファイリング結果を得るには、プロファイリングに使用されるJavaプラットフォームごとに調整データが必要です。初めてプロファイリング・ツールを実行している場合や、そのJavaプラットフォームの有効な調整データが使用できない場合は、IDEによって、使用しているプラットフォーム用の調整プロセスを実行するよう求められます。</p>
<p>調整は1回のみ実行する必要があります。ただし、マシンの構成に対して、マシンのパフォーマンスに影響を与える可能性のある大幅な変更を加えた場合は、再度調整を実行してください。次の手順を実行することによって、いつでも調整を実行できます。</p>
<ol>
<li>「プロファイル」メニューから「拡張コマンド」>「プロファイラの調整を実行」を選択します。</li>
<li>「Javaプラットフォーム」を選択します。「OK」をクリックします。</li>
</ol>
<img alt="「Javaプラットフォームを選択」ダイアログ・ボックス" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/calibrate-select-platform.png" title="調整時にJavaプラットフォームを選択するためのダイアログ・ボックス。" />
<p>調整操作が完了すると、ダイアログ・ボックスが表示されます。「詳細を表示」をクリックして、調整結果に関する情報を含むダイアログ・ボックスを表示できます。Javaプラットフォームごとの調整データは、ホーム・ディレクトリ内の<tt>.nbprofile</tt>ディレクトリ内に保存されます。</p>
<img alt="調整情報ダイアログのスクリーンショット" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/calibrate-information.png" title="調整情報ダイアログ" />
<p class="notes"><strong>注意:</strong>NetBeans IDE 6.9以前を使用している場合は、初めてプロジェクトをプロファイルすると、IDEでプロファイリング・ツールをターゲット・プロジェクトと統合する必要があることを知らせるダイアログ・ボックスが表示されます。</p>
<div class="indent">
<img alt="「プロファイリングの有効化」ダイアログ・ボックス" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/profile-intro-integrate.png" title="プロファイラをプロジェクトと統合するためのダイアログ・ボックス" />
<p>IDEはプロジェクトと統合するために、そのプロジェクトのビルド・スクリプト(<tt>build.xml</tt>)を変更して、必要なプロファイリング・ライブラリ用の追加のビルド・スクリプトをインポートするための次の行を追加します。</p>
<pre class="examplecode">&lt;import file=&quot;nbproject/profiler-build-impl.xml&quot;/&gt;</pre>
<p>
ビルド・スクリプトを変更する前に、IDEによって、元のビルド・スクリプトのバックアップ(<tt>build-before-profiler.xml</tt>)が作成されます。「プロファイル」メニューから「拡張コマンド」>統合解除を選択することによって、いつでも元のビルド・スクリプトを復元できます。</p>
</div>
</div>
<a name="select"></a>
<h2>プロファイリング・タスクの選択</h2>
<p>IDEには、ニーズに応じてプロファイリングを調整できる多数の内部設定が用意されています。たとえば、生成される情報の量がいくぶん減るのと引き替えに、プロファイリングのオーバーヘッドを減らすことができます。ただし、使用可能な多数の設定の意味や使用方法を理解するには、ある程度時間がかかる可能性があります。多くのアプリケーションでは、ほとんどの場合、プロファイリング・タスクに指定されたデフォルト設定で十分です。</p>
<p>プロジェクトをプロファイリングする場合は、プロファイリング・タスクの選択ダイアログ・ボックスを使用して、取得するプロファイリング情報のタイプに応じたタスクを選択します。次の表は、プロファイリング・タスクと、そのタスクの実行から得られるプロファイリング結果を示しています。</p>
<table>
<tbody>
<tr>
<th class="tblheader" scope="col">プロファイリング・タスク</th>
<th class="tblheader" scope="col">結果</th>
</tr>
<tr>
<td class="tbltd1"><a href="#monitor">アプリケーションをモニター</a></td>
<td class="tbltd1">スレッドのアクティビティやメモリー割当てなどの、ターゲットJVMのプロパティに関する概要を取得する場合にこれを選択します。</td>
</tr>
<tr>
<td class="tbltd1"><a href="#cpu">CPUパフォーマンスを解析</a></td>
<td class="tbltd1">メソッドの実行時間やメソッドが呼び出された回数などの、アプリケーション・パフォーマンスに関する詳細データを取得する場合にこれを選択します。</td>
</tr>
<tr>
<td class="tbltd1"><a href="#memory">メモリー使用状況を解析</a></td>
<td class="tbltd1">オブジェクト割当てとガベージ・コレクションに関する詳細データを取得する場合にこれを選択します。</td>
</tr>
</table>
<p>プロファイリング・タスクの選択ダイアログ・ボックスは、プロファイリング・タスクを実行するための主要なインタフェースです。タスクを選択した後、そのタスク設定を変更して、得られる結果を微調整できます。また、プロファイリング・タスクごとに、そのタスクに基づいたカスタムのプロファイリング・タスクを作成して保存することもできます。カスタムのプロファイリング・タスクを作成すると、そのカスタム・タスクがプロファイリング・タスクの選択ダイアログ・ボックスに表示され、後でカスタム設定を容易に検索したり、実行したりできるようになります。カスタムのプロファイリング・タスクを作成する場合は、プロファイリング・タスクの選択ダイアログ・ボックスで「<b>詳細設定</b>」をクリックすることによって、さらに高度なプロファイリング設定を変更できます。</p>
<div class="indent">
<a name="monitor"></a>
<h3>アプリケーションのモニター</h3>
<p>「モニター」タスクを選択した場合、ターゲット・アプリケーションはインストゥルメントなしで起動されます。アプリケーションをモニターしている場合は、ターゲットJVMのいくつかの重要なプロパティに関する概要を取得します。アプリケーションのモニターにかかるオーバーヘッドは非常に低いため、このモードではアプリケーションを長時間実行できます。</p>
<p>Anagram Gameアプリケーションをモニターするには、次の手順を実行します。</p>
<ol>
<li>AnagramGameプロジェクトがメイン・プロジェクトとして設定されていることを確認します。</li>
<li>メイン・メニューから「プロファイル」>「メイン・プロジェクトのプロファイル」を選択します。
<p>または、「プロジェクト」ウィンドウでプロジェクト・ノードを右クリックし、「プロファイル」を選択します。</p></li>
<li>プロファイリング・タスクの選択ダイアログ・ボックスで「モニター」を選択します。</li>
<li>必要に応じて、追加のモニター・オプションを選択します。「実行」をクリックします。<br> <img alt="プロファイリング・タスクの選択ダイアログ - アプリケーションのモニター" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/monitor-task.png" title="「アプリケーションのモニター」プロファイリング・タスクの選択">
<p class="tips">オプションの上にカーソルを置くと、ツールチップにそのオプションの詳細を表示できます。</p>
</li>
</ol>
<p>「実行」をクリックすると、IDEによってアプリケーションが起動され、IDEの左ペインに「プロファイラ」ウィンドウが開きます。「プロファイラ」ウィンドウには、次を実行できるコントロールが含まれています。</p>
<ul>
<li>プロファイリング・タスクの制御</li>
<li>現在のプロファイリング・タスクのステータスの確認</li>
<li>プロファイリング結果の表示</li>
<li>プロファイリング結果のスナップショットの管理</li>
<li>基本的な遠隔測定統計の確認</li>
</ul>
<p>「プロファイラ」ウィンドウまたはメイン・メニュー内のコントロールを使用して、モニター・データを表示できる各ウィンドウを開くことができます。「遠隔測定の概要」ウィンドウを使用すると、モニター・データの概要をリアル・タイムですばやく取得できます。グラフの上にカーソルを置くと、そのグラフに表示されているデータに関するより詳細な統計情報を表示できます。「遠隔測定の概要」ウィンドウ内のいずれかのグラフをダブルクリックして、そのグラフのより大きく、より詳細なバージョンを開くことができます。</p>
<img alt="「遠隔測定の概要」ウィンドウのスクリーンショット" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/profile-intro-telemoverview.png" title="「遠隔測定の概要」ウィンドウ">
<p class="tips">概要が自動的に開かれない場合は、「ウィンドウ」>「プロファイリング」>「VM遠隔測定の概要」を選択して、「出力」ウィンドウに概要を開くことができます。プロファイリング・セッション中はいつでも、「VM遠隔測定の概要」ウィンドウを開いてモニター・データを確認できます。<p>
<a name="cpu"></a>
<h3>CPUパフォーマンスの解析</h3>
<p>「CPU」タスクを選択すると、IDEによってアプリケーションのメソッド・レベルのCPUパフォーマンス(実行時間)がプロファイルされ、結果がリアル・タイムで処理されます。パフォーマンスを解析する方法として、定期的にスタック・トレースを取得するか、またはアプリケーション内のメソッドをインストゥルメントするかを選択できます。すべてのメソッドをインストゥルメントするか、またはインストゥルメントをアプリケーション・コードの一部に(場合によっては、特定のコード・フラグメントにまで)制限するかを選択できます。</p>
<p>CPUパフォーマンスを解析するには、次のオプションのいずれかを選択することによって、アプリケーションがプロファイルされる方法を選択します。</p>
<ul>
<li><b>簡易(サンプリング)。</b>このモードでは、IDEはアプリケーションをサンプリングし、定期的にスタック・トレースを取得します。このオプションは、メソッドをインストゥルメントする方法と比較して正確性が低下しますが、オーバーヘッドは低くなります。このオプションは、インストゥルメントが必要になる可能性のあるメソッドを見つけるのに役立ちます。</li>
<li><b>詳細(インストゥルメント済)。</b>このモードでは、プロファイルされたアプリケーションのメソッドがインストゥルメントされます。IDEでは、スレッドがプロジェクトのメソッドに入った時刻と出た時刻が記録されるため、各メソッド内で費やされた時間の長さを確認できます。メソッドに入るときは、スレッドによって「メソッドに入る」イベントが生成されます。メソッドから出るときは、スレッドによって対応する「メソッドから出る」イベントが生成されます。この両方のイベントのタイムスタンプが記録されます。これらのデータはリアル・タイムで処理されます。
<p>アプリケーション内のすべてのメソッドをインストゥルメントするか、または1つ以上の<b>ルート・メソッド</b>を指定することによってインストゥルメントをアプリケーションのコードのサブセットに制限するかを選択できます。ルート・メソッドは、ソース・コード内でポップアップ・メニューを使用するか、または「<b>カスタマイズ</b>」をクリックして「プロファイリング・ルートの編集」ダイアログ・ボックスを開くことによって指定できます。</p>
<p>ルート・メソッドは、ユーザーがインストゥルメントのルートとして指定する、ソース・コード内のメソッド、クラス、またはパッケージです。プロファイリング・データは、アプリケーションのスレッドのいずれかがインストゥルメントのルートに入ったときと出たときに収集されます。アプリケーションのスレッドのいずれかがルート・メソッドに入るまで、プロファイリング・データは収集されません。ルート・メソッドを指定すると、プロファイリングのオーバーヘッドを大幅に削減できます。一部のアプリケーションでは、アプリケーション全体をプロファイリングすると、大量のプロファイリング・データが生成されてアプリケーションが使用できなくなるか、またはアプリケーションがクラッシュする原因になる可能性があるため、ルート・メソッドを指定することが、詳細な、または現実的なパフォーマンス・データを取得するための唯一の方法である場合があります。</p>
</li>
</ul>
<p class="notes"><b>注意:</b> クイック・プロファイル・モードはNetBeans IDE 7.0以前では使用できません。プロファイリング結果を取得するにはインストゥルメントを使用するしかありませんが、アプリケーション全体をインストゥルメントするか、または1つ以上のルート・メソッドを指定することによってインストゥルメントをアプリケーションの一部に制限するかを選択できます。
</p>
<p class="tips">インストゥルメントされるソースを制限するためのフィルタを使用することによって、プロファイルされるコードの量をさらに微調整できます。</p>
<p>ここで、IDEを使用してAnagram GameアプリケーションのCPUパフォーマンスを解析します。「アプリケーションの一部」オプションを選択した後、プロファイリング・ルートとして<tt>WordLibrary.java</tt>を選択します。このクラスをプロファイリング・ルートとして選択することによって、プロファイリングがこのクラス内のメソッドに制限されます。</p>
<ol>
<li>「プロファイラ」ウィンドウ内の「停止」ボタンをクリックして、以前のプロファイリング・セッションを停止します(まだ実行されている場合)。</li>
<li>メイン・メニューから「プロファイル」>「メイン・プロジェクトのプロファイル」を選択します。</li>
<li>プロファイリング・タスクの選択ダイアログ・ボックスで「CPU」を選択します。</li>
<li><strong>詳細(インストゥルメント済)</strong>」を選択します。
<p>このオプションを使用するには、プロファイリング用ルート・メソッドも指定する必要があります。</p></li>
<li><b>カスタマイズ</b>」をクリックして「プロファイリング・ルートの編集」ダイアログ・ボックスを開きます。<br /><img alt="プロファイリング・タスクの選択ダイアログ・ボックス - CPU" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/select-cpu-task.png" title="「CPU」プロファイリング・タスクの選択" /></li>
<li>「プロファイリング・ルートの編集」ダイアログ・ボックスで、「AnagramGame」ノードを展開し、<tt>Sources/com.toy.anagrams.lib/WordLibrary</tt>を選択します。プロジェクトをプロファイリングする場合は、複数のルート・メソッドを指定できます。<br /><img alt="ルート・メソッドを選択するためのダイアログ・ボックス" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/edit-profiling-roots.png" title="ルート・メソッドを選択するためのダイアログ・ボックス" /></li>
<li>「詳細」ボタンをクリックして、ルート・メソッドを追加、編集、および除去するためのより詳細なオプションを提供する「プロファイリング・ルートの編集(詳細)」ダイアログ・ボックスを開きます。<br /><img alt="ルート・メソッドを指定するためのダイアログ・ボックス" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/edit-profiling-roots-adv.png" title="ルート・メソッドを指定するためのダイアログ・ボックス" />
<p><tt>WordLibrary</tt>がルート・メソッドとして表示されていることが確認できます。「OK」をクリックして「プロファイリング・ルートの編集(詳細)」ダイアログ・ボックスを閉じます。</p>
</li>
<li>「OK」をクリックして「プロファイリング・ルートの編集」ダイアログ・ボックスを閉じます。
<p>プロファイリング・ルートを選択した後に、プロファイリング・タスクの選択ダイアログ・ボックスで「<b>編集</b>」をクリックし、選択したルート・メソッドを変更できます。</p></li>
<li>「フィルタ」値で「<b>プロジェクト・クラスだけをプロファイル</b>」を選択します。
<p>
フィルタを使用すると、インストゥルメントされるクラスを制限できます。IDEの事前定義されたプロファイリング・フィルタから選択するか、または独自のカスタム・フィルタを作成することができます。「<b>フィルタ値を表示</b>」をクリックして、選択したフィルタが適用されたときにプロファイルされるクラスの一覧を確認できます。
</p>
<img alt="「フィルタ値を表示」ダイアログ・ボックス" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/show-filter-value.png" title="「フィルタ値を表示」ダイアログ・ボックス" />
</li>
<li>プロファイリング・タスクの選択ダイアログ・ボックスで「実行」をクリックし、プロファイリング・セッションを開始します。</li>
</ol>
<p>「実行」をクリックすると、IDEによってアプリケーションが起動され、プロファイリング・セッションが開始されます。プロファイリング結果を表示するには、「プロファイラ」ウィンドウ内の「ライブ結果」をクリックして「ライブ結果」ウィンドウを開きます。「ライブ結果」ウィンドウには、これまでに収集されたプロファイリング・データが表示されます。表示されるデータは、デフォルトでは数秒ごとにリフレッシュされます。CPUパフォーマンスを解析している場合、「ライブ結果」ウィンドウには、各メソッドの所要時間と各メソッドの呼出し回数に関する情報が表示されます。Anagram Gameアプリケーションでは、選択されたルート・メソッドのみが最初に呼び出されていることが確認できます。</p>
<img alt="CPUのライブ結果のスクリーンショット" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/cpu-liveresults1.png" title="CPUのライブ結果" />
<p>メソッドの名前を右クリックし、「ソースへ移動」を選択することによって、一覧表示された任意のメソッドを含むソース・コードにすばやく移動できます。「ソースへ移動」をクリックすると、そのクラスがソース・エディタに表示されます。</p>
<a name="memory"></a>
<h3>メモリー使用状況の解析</h3>
<p>メモリー使用状況を解析タスクによって、ターゲット・アプリケーション内で割り当てられているオブジェクトに関するデータ(割り当てられたオブジェクトの数、型、場所など)が提供されます。 </p>
<p>メモリー・パフォーマンスを解析するには、次のオプションのいずれかを選択することによって、取得するデータの量を選択します。</p>
<ul>
<li><b>オブジェクト作成のみ記録。</b>このオプションを選択すると、ターゲットJVMによって現在ロードされているすべてのクラス(および新規にロードされる各クラス)がインストゥルメントされ、オブジェクト割当てに関する情報が生成されます。</li>
<li><b>オブジェクト作成とガベージ・コレクションの両方を記録。</b>選択されている場合は、アプリケーションをプロファイリングすると、引続きライブである各型のオブジェクトの数、それらのサイズや平均年齢、割当てデータなど、オブジェクトのライブに関する情報が提供されます。</li>
</ul>
<p>最初のオプションは2番目のオプションの機能的なサブセットであるため、パフォーマンスやメモリーのオーバーヘッドは小さくなります。プロファイリング・タスクの選択ウィンドウの「オーバーヘッド」メーターは、ユーザーが選択したプロファイリング・オプションに応じて、プロファイリングのオーバーヘッドの大まかな増減を示します。</p>
<p>この課題では、IDEを使用してAnagram Gameアプリケーションのメモリー・パフォーマンスを解析します。「<b>オブジェクト作成とガベージ・コレクションの両方を記録</b>」オプションを選択し、IDEで完全なコール・スタックが記録されるように、「<b>割当てのスタック・トレースを記録</b>」を選択します。このオプションを選択すると、メモリー・スナップショットを作成したときに、オブジェクトを割り当てたメソッド・コールの逆コール・ツリーを表示できます。</p>
<ol>
<li>「プロファイラ」ウィンドウ内の「停止」ボタンをクリックして以前のプロファイリング・セッションを停止し(まだ実行されている場合)、Anagram Gameアプリケーションを停止します。</li>
<li>メイン・メニューから「プロファイル」>「メイン・プロジェクトのプロファイル」を選択します。</li>
<li>プロファイリング・タスクの選択ダイアログ・ボックスで「メモリー」を選択します。</li>
<li><strong>オブジェクト作成とガベージ・コレクションの両方を記録</strong>」を選択します。</li>
<li>「次ごとにトラック: Nオブジェクト割当て」は、デフォルト値10のままにします。
<p>このオプションは、スタック・サンプリングの間隔や比率を設定します。10の値を設定すると、完全に記録されるのは、クラスごとに10回に1回のオブジェクト割当てのみであることを示します。各オブジェクトのすべての情報を記録するには、この値を1に設定できます。ただし、これにより、プロファイリングのオーバーヘッドが大幅に増加します。</p></li>
<li><b>割当てのスタック・トレースを記録</b>」を選択します。「実行」をクリックして、プロファイリング・セッションを開始します。
<p>このオプションを選択すると、「オーバーヘッド」メーターが大幅に増加しますが、このアプリケーションは十分に小さいためにパフォーマンスの低下は管理可能であるはずです。</p>
<img alt="プロファイリング・タスクの選択ダイアログ・ボックス - メモリー" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/memory-task.png" title="「メモリー」プロファイリング・タスクの選択" /></li>
</ol>
<p>「実行」をクリックすると、IDEによってアプリケーションが起動され、プロファイリング・セッションが開始されます。プロファイリング結果を表示するには、「プロファイラ」ウィンドウ内の「ライブ結果」をクリックして「ライブ結果」ウィンドウを開きます。「ライブ結果」ウィンドウに、プロジェクト内で割り当てられているオブジェクトのサイズと数に関する情報が表示されます。 </p>
<p>デフォルトでは、結果は「ライブ・バイト数」の数でソートされて表示されますが、列ヘッダーをクリックすると結果の表示方法を変更できます。また、リストの下にあるフィルタ・ボックスにクラス名を入力して結果をフィルタすることもできます。</p>
<img alt="メモリーのプロファイリング結果" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/memory-liveresults.png" title="メモリーのプロファイリング結果" /="/">
</div>
<a name="snapshot"></a>
<h2>スナップショットの作成</h2>
<p>プロファイリング・セッションが進行中の場合は、スナップショットを作成することによってプロファイリング結果を取り込むことができます。スナップショットでは、そのスナップショットが作成された時点のプロファイリング・データが取り込まれます。ただし、スナップショットは、次の点でプロファイリングのライブ結果とは異なります。</p>
<ul>
<li>スナップショットは、プロファイリング・セッションが実行中でなくても確認できます。</li>
<li>スナップショットには、ライブ結果よりも詳細なプロファイリング・データの記録が含まれます。</li>
<li>スナップショットは簡単に比較できます(メモリー・スナップショット)。</li>
</ul>
<p>プロジェクトのスナップショットを開くためにプロファイリング・セッションが進行中である必要はないため、「プロファイラ」ウィンドウで、保存されたスナップショットの一覧にあるスナップショットを選択し、「開く」をクリックすることによって、いつでもプロジェクトのスナップショットを開くことができます。</p>
<div class="indent">
<a name="takesnap"></a>
<h3>メモリー・スナップショットの作成と比較</h3>
<p>Anagram Gameアプリケーションでは、結果のスナップショットを作成して、型<tt>String</tt>のオブジェクトの割当てスタック・トレースを表示できます。次に、別のスナップショットを作成してこの2つを比較できます。メモリー・スナップショットを比較することによって、2つのスナップショットを作成した時点の間にヒープに作成されたオブジェクト、またはヒープから解放されたオブジェクトを確認できます。これらのスナップショットは比較可能である必要があるため、プロファイリング・タイプ(たとえば、割当てまたはライブ)とトラックされたオブジェクトの数が一致している必要があります。</p>
<p>この課題では、スナップショットを作成してプロジェクトに保存します。次に、2番目のスナップショットを作成し、2番目のスナップショットを保存されたスナップショットと比較します。
</p>
<ol>
<li>プロファイリング・セッションが引続き実行中であることを確認します。<br />(プロファイリング・セッションを停止した場合は、メモリー・パフォーマンスを解析するための手順を繰り返し、「ライブ結果」ウィンドウを開きます。)</li>
<li>「ライブ結果」ウィンドウで<tt>java.lang.String</tt>を含む行を右クリックし、「スナップショットを取得して割当てスタック・トレースを表示」を選択します。
<p>IDEによってメモリー・スナップショットが作成され、そのスナップショットが「割当てスタック・トレース」タブに表示されます。「割当てスタック・トレース」タブでは、選択されたオブジェクトをインスタンス化したメソッドの逆コール・ツリーを調べることができます。</p>
<img alt="メモリーのプロファイリング結果のスナップショット" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/memory-snapshot1.png" title="メモリーのプロファイリング結果のスナップショット" /></li>
<li>スナップショット・ツールバーの「プロジェクトにスナップショットを保存」ボタンをクリックして([Ctrl]-[S]、Macの場合は[&#8984]-[S])、メモリー・スナップショットをプロジェクトに保存します。スナップショットをプロジェクトに保存すると、そのスナップショットが「プロファイラ」ウィンドウ内のAnagram Gameの保存されたスナップショットの一覧に追加されます。デフォルトでは、スナップショットはプロジェクトの<tt>nbproject/private/profiler</tt>ディレクトリ内に物理的に保存されます。保存されたスナップショットには<tt>.nps</tt>の接尾辞が付加されます。
<p class="notes"><b>注意:</b>スナップショットはファイルシステム上の任意の場所に保存できますが、「プロファイラ」ウィンドウに一覧表示されるのは、プロジェクト内のデフォルトの場所に保存されたスナップショットのみです。また、スナップショットのツールバーにある「現在のビューをイメージに保存」ボタンをクリックして、そのスナップショットをIDEの外部で表示できるイメージ・ファイル(<tt>.png</tt>)として保存することもできます。</p>
</li>
<li>「ライブ結果」ツールバーの「収集結果のスナップショットの作成」ボタンをクリックして、別のスナップショットを作成します(または、「プロファイラ」ウィンドウで「スナップショットの取得」ボタンをクリックします)。スナップショットを保存します。</li>
<li>いずれかのメモリー・スナップショットのウィンドウで、スナップショット・ツールバーの相違の計算ボタン(<img alt="スナップショットの比較ボタン" src="../../../images_www/articles/72/java/profile-intro/comparesnapshots.png" style="vertical-align:bottom;margin-top:2px;" title="スナップショットの比較ボタン" />)をクリックします。または、メイン・メニューから「プロファイル」>「メモリー・スナップショットを比較」を選択します。</li>
<li>「比較するスナップショットを選択」で、一覧から開いたスナップショットのいずれかを選択します。「OK」をクリックします。<br><img alt="比較するスナップショットを選択するためのダイアログのスクリーンショット" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/select-snapshot.png" title="「比較するスナップショットを選択」ダイアログ・ボックス" />
<p>メモリー・スナップショットが開いている場合は、それを他の比較可能なメモリー・スナップショットと比較できます。スナップショットを、現在開いている保存されていないスナップショットと比較することも、プロジェクトまたはシステム上の他の任意の場所に保存されたスナップショットと比較することもできます。</p>
<p>「OK」をクリックすると、「ライブの比較」ウィンドウが開き、2つのメモリー・スナップショット間の違いが表示されます。</p>
<img alt="ライブの比較の結果のスクリーンショット" class="margin-around box" src="../../../images_www/articles/72/java/profile-intro/memory-compare.png" title="2つのメモリー・スナップショットのライブの比較の結果を示すタブ" /></li>
</ol>
<p>スナップショットの比較はメモリー・スナップショットと同じように見えますが、比較された2つのスナップショット間の違いのみが表示されます。「ライブ・バイト数」列にあるグラフィカルなバーを使用すると、割り当てられたバイト数の違いを容易に確認できます。その列のセルの左半分が緑色である場合は、そのオブジェクトに割り当てられたバイト数が、最初のスナップショットが作成された時点より2番目のスナップショットが作成された時点の方が少ないことを示します。そのセルの右半分が赤色である場合は、最初のスナップショットより2番目のスナップショットで割り当てられたバイト数の方が多いことを示します。その他の列では、プラス記号(+)が値の増加を示し、マイナス記号(-)が値の減少を示すことがわかります。
</p>
<p class="notes"><strong>注意:</strong>スナップショットが作成される時期をより正確に制御するために、「スナップショットの取得」プロファイリング・ポイントを設定することもできます。プロファイリング・ポイントを使用してスナップショットを作成する方法の詳細は、<a href="../../docs/java/profiler-profilingpoints.html">NetBeans IDEでのプロファイリング・ポイントの使用</a>を参照してください。</p>
</div>
<div class="feedback-box">
<a href="/about/contact_form.html?to=3&amp;subject=Feedback:%20Introduction%20to%20Profiling">このチュートリアルに関するご意見をお寄せください</a></div>
<br style="clear:both;">
<a name="seeAlso"></a>
<h2>関連項目</h2>
<p>これで、NetBeans IDEを使用したアプリケーションのプロファイリングの概要は終了です。このドキュメントでは、IDEを使用して単純なNetBeansプロジェクトをプロファイルし、プロファイリング結果を表示する方法の基本を示しました。上に概要を示した手順は、ほとんどのプロジェクトのプロファイリングに適用できます。エンタープライズ・アプリケーションや自由形式プロジェクトなどのより複雑なプロジェクトのプロファイリングには、追加の構成手順が必要になることがあります。</p>
<p>このドキュメントで説明されていないプロファイリング設定および機能の詳細は、製品に含まれ、「ヘルプ」メニュー項目から使用できるドキュメントを参照してください。<p>
<p>関連ドキュメントについては、次のリソースを参照してください。</p>
<ul>
<li><a href="http://wiki.netbeans.org/wiki/view/NetBeansUserFAQ#section-NetBeansUserFAQ-Profiler">NetBeansプロファイラのFAQ</a><br /> NetBeans IDEでのアプリケーションのプロファイリングに関連した、よくある質問を含むドキュメント</li>
<li><a href="http://wiki.netbeans.org/wiki/view/FaqProfilerProfileFreeForm">FAQ: 自由形式プロジェクトのプロファイリング</a></li>
<li><a href="profiler-screencast.html">スクリーンキャスト: プロファイリング・ポイント、ドリルダウン・グラフ、ヒープ・ウォーカ</a><br /> NetBeans IDEのいくつかのプロファイリング機能を示すデモ。</li>
<li><a href="../../../community/magazine/html/04/profiler.html">詳細なプロファイリング: 実行理論</a></li>
<li><a href="http://www.javapassion.com/handsonlabs/nbprofilermemory/">NetBeansプロファイラを使用したメモリー・リークの検索</a><br /><a href="http://www.javapassion.com/">JavaPassionのサイト</a>でのハンズオン・ラボ</li>
<li><a href="http://profiler.netbeans.org/index.html">profiler.netbeans.org</a><br /> NetBeansプロファイラ・プロジェクトのサイト</li>
<li><a href="http://blogs.oracle.com/nbprofiler">NetBeansプロファイラのブログ</a></li>
<li><a href="http://profiler.netbeans.org/mailinglists.html">NetBeansプロファイラのメーリング・リスト</a></li>
</ul>
<p class="align-center"><a href="#top">先頭</a></p>
</body>
</html>