// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= NetBeans IDEでのJavaアプリケーションのプロファイリングの概要
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: NetBeans IDEでのJavaアプリケーションのプロファイリングの概要 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, NetBeans IDEでのJavaアプリケーションのプロファイリングの概要

NetBeans IDEには、アプリケーションの実行時動作に関する重要な情報を提供できる強力なプロファイリング・ツールが含まれています。NetBeansプロファイリング・ツールを使用すると、IDE内からスレッドの状態、CPUパフォーマンス、およびアプリケーションのメモリー使用状況を容易にモニターすることができ、しかも比較的低いオーバーヘッドしかかかりません。

この入門ドキュメントは、IDEに含まれているプロファイリング・ツールの概要であり、NetBeansプロジェクトのプロファイリングをすばやく開始するのに役立つガイドです。このドキュメントは、IDEで使用できる様々なプロファイリング・タスクと、プロジェクトをプロファイリングしたときに得られるプロファイリング結果を示すことを目的としています。IDEに含まれているすべてのプロファイリング機能を対象としているわけではなく、またアプリケーションで発生する可能性のある特定のパフォーマンスの問題を解決するためにプロファイリング結果を解釈する方法を説明しているわけでもありません。

このドキュメントでは、プロファイリング・ツールを使用して、IDEに含まれている単純なJavaアプリケーションであるAnagram Gameサンプル・アプリケーションに関するプロファイリング・データを取得します。Anagram Gameは非常に単純なJavaアプリケーション・プロジェクトですが、より大規模で複雑なJavaアプリケーションや、Webおよびエンタープライズ・アプリケーション・プロジェクトをプロファイルする場合も同じ手順に従います。

このドキュメントでは、IDEを使用してアプリケーションをプロファイルし、次のプロファイリング結果を取得する方法を示します。

* アプリケーションの実行時動作
* アプリケーションのメソッドによって使用されたCPU時間
* オブジェクト作成

さらに、このドキュメントでは、プロファイリング結果のスナップショットを作成して比較する方法も示します。

image::images/netbeans-stamp-80-74-73.png[title="このページの内容は、NetBeans IDE 7.3、7.4および8.0に適用されます"]




== 開始


=== 前提条件

このドキュメントは、次のテクノロジについて基本的な知識またはプログラミング経験を持つ読者を想定して書かれています。

* Javaプログラミング
* NetBeans IDE


=== チュートリアルに必要なソフトウェア

このチュートリアルでは、コンピュータに次のソフトウェアをインストールしておく必要があります。

|===
|ソフトウェアまたはリソース |必須バージョン 

|link:https://netbeans.org/downloads/index.html[+NetBeans IDE+] |7.3, 7.4, 8.0 

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Java Development Kit (JDK)+] |バージョン7または8 
|===

*注意:*

* プロファイリング・ツールはNetBeans IDEにバンドルされているため、アプリケーションのプロファイリングを開始するための特殊な設定は必要ありません。
* NetBeans IDE 7.2またはそれ以前を使用している場合は、link:../../72/java/profiler-intro.html[+NetBeans IDE 7.2でのJavaアプリケーションのプロファイリングの概要+]を参照してください。


== 初めてのプロファイリング

初めてプロファイリング・ツールを使用する場合は、正確なプロファイル結果が得られるようにするとともに、このツールをプロジェクトに統合するために、IDEでいくつかの初期操作を実行する必要があります。これを示すために、まずAnagramGameプロジェクトを作成し、次に調整を実行します。AnagramGameプロジェクトを初めてプロファイルすると、IDEによって自動的に統合が実行されます。


=== サンプル・プロジェクトの作成

このドキュメントでは、Anagram Gameサンプル・アプリケーションをプロファイルします。これを行うには、まず新規プロジェクト・ウィザードを使用してサンプル・アプリケーションを作成し、プロジェクトをメイン・プロジェクトとして設定します。

Anagram Gameアプリケーションを作成するには、次の手順を実行します。

1. メイン・メニューから「ファイル」>「新規プロジェクト」([Ctrl]-[Shift]-[N]、Macの場合は[⌘]-[Shift]-[N])を選択します。
2. 新規プロジェクト・ウィザードで、「サンプル」>「Java」カテゴリを選択します。
3. Anagram Gameプロジェクトを選択します。「次」をクリックします。
4. プロジェクトの場所を指定します。「終了」をクリックします。

「終了」をクリックすると、IDEによってAnagram Gameサンプル・プロジェクトが作成されます。


[start=5]
. メイン・メニューから「実行」>「メイン・プロジェクトとして設定」>「AnagramGame」を選択します。

プロジェクトをメイン・プロジェクトに設定すると、Anagram Gameプロジェクトの名前が太字で「プロジェクト」ウィンドウに表示されます。デフォルトでは、IDEを使用してプロジェクトをプロファイルすると、IDEによってメイン・プロジェクトがプロファイルされます。メイン・プロジェクトとして設定されたプロジェクトがない場合、IDEでは、「プロジェクト」ウィンドウで選択されたプロジェクトがプロファイルされます。


=== 初めてのプロファイラの使用

正確なプロファイリング結果を得るには、プロファイリングに使用されるJavaプラットフォームごとに調整データが必要です。初めてプロファイリング・ツールを実行している場合や、そのJavaプラットフォームの有効な調整データが使用できない場合は、IDEによって、使用しているプラットフォーム用の調整プロセスを実行するよう求められます。

調整は1回のみ実行する必要があります。ただし、マシンの構成に対して、マシンのパフォーマンスに影響を与える可能性のある大幅な変更を加えた場合は、再度調整を実行してください。次の手順を実行することによって、いつでも調整を実行できます。

1. 「プロファイル」メニューから*「拡張コマンド」*>*「調整データの管理」*を選択します。
2. 「Javaプラットフォーム」を選択します。「調整」をクリックします。
image::images/calibrate-select-platform.png[title="調整時にJavaプラットフォームを選択するためのダイアログ・ボックス。"]

調整操作が完了すると、ダイアログ・ボックスが表示されます。「詳細を表示」をクリックして、調整結果に関する情報を含むダイアログ・ボックスを表示できます。Javaプラットフォームごとの調整データは、ホーム・ディレクトリ内の ``.nbprofile`` ディレクトリ内に保存されます。

image::images/calibrate-information.png[title="調整情報ダイアログ"]

*注意:*NetBeans IDE 7.4以前を使用している場合は、「プロファイル」メニューから*「拡張コマンド」*>*「プロファイラの調整の実行」*を選択し、「調整するJavaプラットフォームを選択」ダイアログ・ボックスでJavaプラットフォームを選択する必要があります。

image::images/calibrate-select-platform.png[title="調整時にJavaプラットフォームを選択するためのダイアログ・ボックス。"]


== プロファイリング・タスクの選択

IDEには、ニーズに応じてプロファイリングを調整できる多数の内部設定が用意されています。たとえば、生成される情報の量がいくぶん減るのと引き替えに、プロファイリングのオーバーヘッドを減らすことができます。ただし、使用可能な多数の設定の意味や使用方法を理解するには、ある程度時間がかかる可能性があります。多くのアプリケーションでは、ほとんどの場合、プロファイリング・タスクに指定されたデフォルト設定で十分です。

プロジェクトをプロファイリングする場合は、「プロファイリング・タスクの選択」ダイアログ・ボックスを使用して、取得するプロファイリング情報のタイプに応じたタスクを選択します。次の表は、プロファイリング・タスクと、そのタスクの実行から得られるプロファイリング結果を示しています。

|===
|プロファイリング・タスク |結果 

|<<monitor,アプリケーションをモニター>> |スレッドのアクティビティやメモリー割当てなどの、ターゲットJVMのプロパティに関する概要を取得する場合にこれを選択します。 

|<<cpu,CPUパフォーマンスを解析>> |メソッドの実行時間やメソッドが呼び出された回数などの、アプリケーション・パフォーマンスに関する詳細データを取得する場合にこれを選択します。 

|<<memory,メモリー使用状況を解析>> |オブジェクト割当てとガベージ・コレクションに関する詳細データを取得する場合にこれを選択します。 
|===

「プロファイリング・タスクの選択」ダイアログ・ボックスは、プロファイリング・タスクを実行するための主要なインタフェースです。タスクを選択した後、そのタスク設定を変更して、得られる結果を微調整できます。また、プロファイリング・タスクごとに、そのタスクに基づいたカスタムのプロファイリング・タスクを作成して保存することもできます。カスタムのプロファイリング・タスクを作成すると、そのカスタム・タスクが「プロファイリング・タスクの選択」ダイアログ・ボックスに表示され、後でカスタム設定を容易に検索したり、実行したりできるようになります。カスタムのプロファイリング・タスクを作成する場合は、「プロファイリング・タスクの選択」ダイアログ・ボックスで「*詳細設定*」をクリックすることによって、さらに高度なプロファイリング設定を変更できます。


=== アプリケーションのモニタリング

「モニター」タスクを選択した場合、ターゲット・アプリケーションはインストゥルメントなしで起動されます。アプリケーションをモニタリングしている場合は、ターゲットJVMのいくつかの重要なプロパティに関する概要を取得します。アプリケーションのモニタリングにかかるオーバーヘッドは非常に低いため、このモードではアプリケーションを長時間実行できます。

Anagram Gameアプリケーションをモニターするには、次の手順を実行します。

1. AnagramGameプロジェクトがメイン・プロジェクトとして設定されていることを確認します。
2. メイン・メニューから「プロファイル」>「メイン・プロジェクトのプロファイル」を選択します。

または、「プロジェクト」ウィンドウでプロジェクト・ノードを右クリックし、「プロファイル」を選択します。


[start=3]
. 「プロファイリング・タスクの選択」ダイアログ・ボックスで「モニター」を選択します。

[start=4]
. 必要に応じて、追加のモニター・オプションを選択します。「実行」をクリックします。
image::images/monitor-task.png[title="「アプリケーションのモニター」プロファイリング・タスクの選択"]

オプションの上にカーソルを置くと、ツールチップにそのオプションの詳細を表示できます。

「実行」をクリックすると、IDEによってアプリケーションが起動され、IDEの左ペインに「プロファイラ」ウィンドウが開きます。「プロファイラ」ウィンドウには、次を実行できるコントロールが含まれています。

* プロファイリング・タスクの制御
* 現在のプロファイリング・タスクのステータスの確認
* プロファイリング結果の表示
* プロファイリング結果のスナップショットの管理
* 基本的な遠隔測定統計の確認

「プロファイラ」ウィンドウまたはメイン・メニュー内のコントロールを使用して、モニタリング・データを表示できる各ウィンドウを開くことができます。「遠隔測定の概要」ウィンドウを使用すると、モニタリング・データの概要をリアル・タイムですばやく取得できます。グラフの上にカーソルを置くと、そのグラフに表示されているデータに関するより詳細な統計情報を表示できます。「遠隔測定の概要」ウィンドウ内のいずれかのグラフをダブルクリックして、そのグラフのより大きく、より詳細なバージョンを開くことができます。

image::images/profile-intro-telemoverview.png[title="「遠隔測定の概要」ウィンドウ"]

概要が自動的に開かれない場合は、「ウィンドウ」>「プロファイリング」>「VM遠隔測定の概要」を選択して、「出力」ウィンドウに概要を開くことができます。プロファイリング・セッション中はいつでも、「VM遠隔測定の概要」ウィンドウを開いてモニタリング・データを確認できます。


=== CPUパフォーマンスの解析

「CPU」タスクを選択すると、IDEによってアプリケーションのメソッド・レベルのCPUパフォーマンス(実行時間)がプロファイルされ、結果がリアル・タイムで処理されます。パフォーマンスを解析する方法として、定期的にスタック・トレースを取得するか、またはアプリケーション内のメソッドをインストゥルメントするかを選択できます。すべてのメソッドをインストゥルメントするか、またはインストゥルメントをアプリケーション・コードの一部に(場合によっては、特定のコード・フラグメントにまで)制限するかを選択できます。

CPUパフォーマンスを解析するには、次のオプションのいずれかを選択することによって、アプリケーションがプロファイルされる方法を選択します。

* *簡易(サンプリング)。*このモードでは、IDEはアプリケーションをサンプリングし、定期的にスタック・トレースを取得します。このオプションは、メソッドをインストゥルメントする方法と比較して正確性が低下しますが、オーバーヘッドは低くなります。このオプションは、インストゥルメントが必要になる可能性のあるメソッドを見つけるのに役立ちます。
* *詳細(インストゥルメント済)。*このモードでは、プロファイルされたアプリケーションのメソッドがインストゥルメントされます。IDEでは、スレッドがプロジェクトのメソッドに入った時刻と出た時刻が記録されるため、各メソッド内で費やされた時間の長さを確認できます。メソッドに入るときは、スレッドによって「メソッドに入る」イベントが生成されます。メソッドから出るときは、スレッドによって対応する「メソッドから出る」イベントが生成されます。この両方のイベントのタイムスタンプが記録されます。これらのデータはリアル・タイムで処理されます。

アプリケーション内のすべてのメソッドをインストゥルメントするか、または1つ以上の*ルート・メソッド*を指定することによってインストゥルメントをアプリケーションのコードのサブセットに制限するかを選択できます。ルート・メソッドは、ソース・コード内でポップアップ・メニューを使用するか、または「*カスタマイズ*」をクリックして「プロファイリング・ルートの編集」ダイアログ・ボックスを開くことによって指定できます。

ルート・メソッドは、ユーザーがインストゥルメントのルートとして指定する、ソース・コード内のメソッド、クラス、またはパッケージです。プロファイリング・データは、アプリケーションのスレッドのいずれかがインストゥルメントのルートに入ったときと出たときに収集されます。アプリケーションのスレッドのいずれかがルート・メソッドに入るまで、プロファイリング・データは収集されません。ルート・メソッドを指定すると、プロファイリングのオーバーヘッドを大幅に削減できます。一部のアプリケーションでは、アプリケーション全体をプロファイリングすると、大量のプロファイリング・データが生成されてアプリケーションが使用できなくなるか、またはアプリケーションがクラッシュする原因になる可能性があるため、ルート・メソッドを指定することが、詳細な、または現実的なパフォーマンス・データを取得するための唯一の方法である場合があります。

*注意:* クイック・プロファイル・モードはNetBeans IDE 7.0以前では使用できません。プロファイリング結果を取得するにはインストゥルメントを使用するしかありませんが、アプリケーション全体をインストゥルメントするか、または1つ以上のルート・メソッドを指定することによってインストゥルメントをアプリケーションの一部に制限するかを選択できます。

インストゥルメントされるソースを制限するためのフィルタを使用することによって、プロファイルされるコードの量をさらに微調整できます。

ここで、IDEを使用してAnagram GameアプリケーションのCPUパフォーマンスを解析します。「アプリケーションの一部」オプションを選択した後、プロファイリング・ルートとして ``WordLibrary.java`` を選択します。このクラスをプロファイリング・ルートとして選択することによって、プロファイリングがこのクラス内のメソッドに制限されます。

1. 「プロファイラ」ウィンドウ内の「停止」ボタンをクリックして、以前のプロファイリング・セッションを停止します(まだ実行されている場合)。
2. メイン・メニューから「プロファイル」>「メイン・プロジェクトのプロファイル」を選択します。
3. 「プロファイリング・タスクの選択」ダイアログ・ボックスで「CPU」を選択します。
4. 「*詳細(インストゥルメント済)*」を選択します。

このオプションを使用するには、プロファイリング用ルート・メソッドも指定する必要があります。


[start=5]
. 「*カスタマイズ*」をクリックして「プロファイリング・ルートの編集」ダイアログ・ボックスを開きます。
image::images/select-cpu-task.png[title="「CPU」プロファイリング・タスクの選択"]

[start=6]
. 「プロファイリング・ルートの編集」ダイアログ・ボックスで、「AnagramGame」ノードを展開し、 ``Sources/com.toy.anagrams.lib/WordLibrary`` を選択します。プロジェクトをプロファイリングする場合は、複数のルート・メソッドを指定できます。
image::images/edit-profiling-roots.png[title="ルート・メソッドを選択するためのダイアログ・ボックス"]

[start=7]
. 「詳細」ボタンをクリックして、ルート・メソッドを追加、編集、および除去するためのより詳細なオプションを提供する「プロファイリング・ルートの編集(詳細)」ダイアログ・ボックスを開きます。
image::images/edit-profiling-roots-adv.png[title="ルート・メソッドを指定するためのダイアログ・ボックス"]

 ``WordLibrary`` がルート・メソッドとして表示されていることが確認できます。「OK」をクリックして「プロファイリング・ルートの編集(詳細)」ダイアログ・ボックスを閉じます。


[start=8]
. 「OK」をクリックして「プロファイリング・ルートの編集」ダイアログ・ボックスを閉じます。

プロファイリング・ルートを選択した後に、「プロファイリング・タスクの選択」ダイアログ・ボックスで「*編集*」をクリックし、選択したルート・メソッドを変更できます。


[start=9]
. 「フィルタ」値で「*プロジェクト・クラスだけをプロファイル*」を選択します。

フィルタを使用すると、インストゥルメントされるクラスを制限できます。IDEの事前定義されたプロファイリング・フィルタから選択するか、または独自のカスタム・フィルタを作成することができます。「*フィルタ値を表示*」をクリックして、選択したフィルタが適用されたときにプロファイルされるクラスの一覧を確認できます。

image::images/show-filter-value.png[title="「フィルタ値を表示」ダイアログ・ボックス"]

[start=10]
. 「プロファイリング・タスクの選択」ダイアログ・ボックスで「実行」をクリックし、プロファイリング・セッションを開始します。

「実行」をクリックすると、IDEによってアプリケーションが起動され、プロファイリング・セッションが開始されます。プロファイリング結果を表示するには、「プロファイラ」ウィンドウ内の「ライブ結果」をクリックして「ライブ結果」ウィンドウを開きます。「ライブ結果」ウィンドウには、これまでに収集されたプロファイリング・データが表示されます。表示されるデータは、デフォルトでは数秒ごとにリフレッシュされます。CPUパフォーマンスを解析している場合、「ライブ結果」ウィンドウには、各メソッドの所要時間と各メソッドの呼出し回数に関する情報が表示されます。Anagram Gameアプリケーションでは、選択されたルート・メソッドのみが最初に呼び出されていることが確認できます。

image::images/cpu-liveresults1.png[title="CPUのライブ結果"]

メソッドの名前を右クリックし、「ソースへ移動」を選択することによって、一覧表示された任意のメソッドを含むソース・コードにすばやく移動できます。「ソースへ移動」をクリックすると、そのクラスがソース・エディタに表示されます。


=== メモリー使用状況の解析

「メモリー使用状況を解析」タスクによって、ターゲット・アプリケーション内で割り当てられているオブジェクトに関するデータ(割り当てられたオブジェクトの数、型、場所など)が提供されます。

メモリー・パフォーマンスを解析するには、次のオプションのいずれかを選択することによって、取得するデータの量を選択します。

* *簡易。*このオプションが選択されている場合、プロファイラはアプリケーションをサンプリングして、ライブ・オブジェクトに限定されたデータを提供します。このオプションは、ライブ・オブジェクトのみ追跡し、計測時に割当てを追跡しません。このオプションを選択した場合は、スタック・トレースを記録したり、プロファイリング・ポイントを使用したりすることはできません。このオプションを選択すると、「詳細」オプションよりもオーバーヘッドが大幅に削減されます。
* *詳細。*このオプションを選択すると、割り当てられたオブジェクトの数、タイプおよび場所に関する情報を取得できます。ターゲットJVMによって現在ロードされているすべてのクラス(および新規にロードされる各クラス)が計測され、オブジェクト割当てに関する情報が生成されます。メモリ使用状況の分析時にプロファイリング・ポイントを使用する場合、またはコール・スタックを記録する場合は、このオプションを選択する必要があります。このオプションを選択すると、簡易オプションよりもプロファイリング・オーバーヘッドが増加します。

「詳細」オプションを選択した場合は、次のオプションも設定できます。

* *完全なオブジェクト・ライフスタイルを記録。*存続している世代数など、各オブジェクトのすべての情報を記録するには、このオプションを選択します。
* *割当てのスタック・トレースを記録。*完全なコール・スタックを記録するには、このオプションを選択します。このオプションでは、メモリー・スナップショットを表示する際にメソッド呼出しの逆呼出しツリーを表示できます。
* *定義済みプロファイリング・ポイントを使用。*プロファイリング・ポイントを有効にするには、このオプションを選択します。無効なプロファイリング・ポイントは無視されます。選択解除されている場合は、プロジェクト内のすべてのプロファイリング・ポイントが無視されます。

「プロファイリング・タスクの選択」ウィンドウの「オーバーヘッド」メーターは、ユーザーが選択したプロファイリング・オプションに応じて、プロファイリングのオーバーヘッドの大まかな増減を示します。

この課題では、IDEを使用してAnagram Gameアプリケーションのメモリー・パフォーマンスを解析します。*「詳細」*オプションを選択し、*「割当てのスタック・トレースを記録」*を選択して、IDEで完全なコール・スタックを記録できます。このオプションを選択すると、メモリー・スナップショットを作成したときに、逆呼出しツリーを表示できます。

1. 「プロファイラ」ウィンドウ内の「停止」ボタンをクリックして以前のプロファイリング・セッションを停止し(まだ実行されている場合)、Anagram Gameアプリケーションを停止します。
2. メイン・メニューから「プロファイル」>「メイン・プロジェクトのプロファイル」を選択します。
3. 「プロファイリング・タスクの選択」ダイアログ・ボックスで「メモリー」を選択します。
4. *「詳細」*を選択します。
5. *「割当てのスタック・トレースを記録」*を選択します。「実行」をクリックして、プロファイリング・セッションを開始します。

このオプションを選択すると、「オーバーヘッド」メーターが大幅に増加しますが、このアプリケーションは十分に小さいためにパフォーマンスの低下は管理可能であるはずです。

image::images/profile-java-memory.png[title="「メモリー」プロファイリング・タスクの選択"]

「実行」をクリックすると、IDEによってアプリケーションが起動され、プロファイリング・セッションが開始されます。プロファイリング結果を表示するには、「プロファイラ」ウィンドウ内の「ライブ結果」をクリックして「ライブ結果」ウィンドウを開きます。「ライブ結果」ウィンドウに、プロジェクト内で割り当てられているオブジェクトのサイズと数に関する情報が表示されます。

デフォルトでは、結果は「ライブ・バイト数」の数でソートされて表示されますが、列ヘッダーをクリックすると結果の表示方法を変更できます。また、リストの下にあるフィルタ・ボックスにクラス名を入力して結果をフィルタすることもできます。

image::images/profile-java-memresults1.png[title="メモリーのプロファイリング結果"]


== スナップショットの作成

プロファイリング・セッションが進行中の場合は、スナップショットを作成することによってプロファイリング結果を取り込むことができます。スナップショットでは、そのスナップショットが作成された時点のプロファイリング・データが取り込まれます。ただし、スナップショットは、次の点でプロファイリングのライブ結果とは異なります。

* スナップショットは、プロファイリング・セッションが実行中でなくても確認できます。
* スナップショットには、ライブ結果よりも詳細なプロファイリング・データの記録が含まれます。
* スナップショットは簡単に比較できます(メモリー・スナップショット)。

プロジェクトのスナップショットを開くためにプロファイリング・セッションが進行中である必要はないため、「プロファイラ」ウィンドウで、保存されたスナップショットの一覧にあるスナップショットを選択し、「開く」をクリックすることによって、いつでもプロジェクトのスナップショットを開くことができます。


=== メモリー・スナップショットの作成と比較

Anagram Gameアプリケーションでは、結果のスナップショットを作成して、型 ``String`` のオブジェクトの割当てスタック・トレースを表示できます。次に、別のスナップショットを作成してこの2つを比較できます。メモリー・スナップショットを比較することによって、2つのスナップショットを作成した時点の間にヒープに作成されたオブジェクト、またはヒープから解放されたオブジェクトを確認できます。これらのスナップショットは比較可能である必要があるため、プロファイリング・タイプ(たとえば、割当てまたはライブ)とトラックされたオブジェクトの数が一致している必要があります。

この課題では、スナップショットを作成してプロジェクトに保存します。次に、2番目のスナップショットを作成し、2番目のスナップショットを保存されたスナップショットと比較します。

1. プロファイリング・セッションが引続き実行中であることを確認します。
(プロファイリング・セッションを停止した場合は、メモリー・パフォーマンスを解析するための手順を繰り返し、「ライブ結果」ウィンドウを開きます。)

[start=2]
. 「ライブ結果」ウィンドウで ``java.lang.String`` を含む行を右クリックし、「スナップショットを取得して割当てスタック・トレースを表示」を選択します。

「ライブ結果」ウィンドウでフィルタを使用して、行を検索できます。

image::images/profile-java-memstack1.png[title="メモリーのプロファイリング結果のスナップショット"]

IDEによってメモリー・スナップショットが作成され、そのスナップショットが「割当てスタック・トレース」タブに表示されます。「割当てスタック・トレース」タブでは、選択されたオブジェクトをインスタンス化したメソッドの逆コール・ツリーを調べることができます。


[start=3]
. スナップショット・ツールバーの「プロジェクトにスナップショットを保存」ボタンをクリックして([Ctrl]-[S]、Macの場合は[⌘]-[S])、メモリー・スナップショットをプロジェクトに保存します。スナップショットをプロジェクトに保存すると、そのスナップショットが「プロファイラ」ウィンドウ内のAnagram Gameの保存されたスナップショットの一覧に追加されます。デフォルトでは、スナップショットはプロジェクトの ``nbproject/private/profiler`` ディレクトリ内に物理的に保存されます。保存されたスナップショットには ``.nps`` の接尾辞が付加されます。

*注意:*スナップショットはファイルシステム上の任意の場所に保存できますが、「プロファイラ」ウィンドウに一覧表示されるのは、プロジェクト内のデフォルトの場所に保存されたスナップショットのみです。また、スナップショットのツールバーにある「現在のビューをイメージに保存」ボタンをクリックして、そのスナップショットをIDEの外部で表示できるイメージ・ファイル( ``.png`` )として保存することもできます。


[start=4]
. 「ライブ結果」ツールバーの「収集結果のスナップショットの作成」ボタンをクリックして、別のスナップショットを作成します(または、「プロファイラ」ウィンドウで「スナップショットの取得」ボタンをクリックします)。スナップショットを保存します。

[start=5]
. いずれかのメモリー・スナップショットのウィンドウで、スナップショット・ツールバーの「相違の計算」ボタン(image::images/comparesnapshots.png[title="スナップショットの比較ボタン"])をクリックします。または、メイン・メニューから「プロファイル」>「メモリー・スナップショットを比較」を選択します。

[start=6]
. 「比較するスナップショットを選択」で、一覧から開いたスナップショットのいずれかを選択します。「OK」をクリックします。
image::images/profile-java-selectsnap.png[title="「比較するスナップショットを選択」ダイアログ・ボックス"]

メモリー・スナップショットが開いている場合は、それを他の比較可能なメモリー・スナップショットと比較できます。スナップショットを、現在開いている保存されていないスナップショットと比較することも、プロジェクトまたはシステム上の他の任意の場所に保存されたスナップショットと比較することもできます。

「OK」をクリックすると、「ライブの比較」ウィンドウが開き、2つのメモリー・スナップショット間の違いが表示されます。

image::images/profile-java-compare.png[title="2つのメモリー・スナップショットのライブの比較の結果を示すタブ"]

スナップショットの比較はメモリー・スナップショットと同じように見えますが、比較された2つのスナップショット間の違いのみが表示されます。列の数値を参照すると、プラス記号(+)が値の増加を示し、マイナス記号(-)が値の減少を示すことがわかります。「ライブ・バイト数」列にあるグラフィカルなバーを使用すると、割り当てられたバイト数の違いを容易に確認できます。その列のセルの左半分が緑色である場合は、そのオブジェクトに割り当てられたバイト数が、最初のスナップショットが作成された時点より2番目のスナップショットが作成された時点の方が少ないことを示します。そのセルの右半分が赤色である場合は、最初のスナップショットより2番目のスナップショットで割り当てられたバイト数の方が多いことを示します。

*注意:*スナップショットが作成される時期をより正確に制御するために、「スナップショットの取得」プロファイリング・ポイントを設定することもできます。プロファイリング・ポイントを使用してスナップショットを作成する方法の詳細は、link:../../docs/java/profiler-profilingpoints.html[+NetBeans IDEでのプロファイリング・ポイントの使用+]を参照してください。

link:/about/contact_form.html?to=3&subject=Feedback:%20Introduction%20to%20Profiling[+このチュートリアルに関するご意見をお寄せください+]



== 関連項目

これで、NetBeans IDEを使用したアプリケーションのプロファイリングの概要は終了です。このドキュメントでは、IDEを使用して単純なNetBeansプロジェクトをプロファイルし、プロファイリング結果を表示する方法の基本を示しました。上に概要を示した手順は、ほとんどのプロジェクトのプロファイリングに適用できます。エンタープライズ・アプリケーションや自由形式プロジェクトなどのより複雑なプロジェクトのプロファイリングには、追加の構成手順が必要になることがあります。

このドキュメントで説明されていないプロファイリング設定および機能の詳細は、製品に含まれ、「ヘルプ」メニュー項目から使用できるドキュメントを参照してください。

関連ドキュメントについては、次のリソースを参照してください。

* link:http://wiki.netbeans.org/wiki/view/NetBeansUserFAQ#section-NetBeansUserFAQ-Profiler[+NetBeansプロファイラのFAQ+]
NetBeans IDEでのアプリケーションのプロファイリングに関連した、よくある質問を含むドキュメント
* link:http://wiki.netbeans.org/wiki/view/FaqProfilerProfileFreeForm[+FAQ: 自由形式プロジェクトのプロファイリング+]
* link:profiler-screencast.html[+スクリーンキャスト: プロファイリング・ポイント、ドリルダウン・グラフ、ヒープ・ウォーカ+]
NetBeans IDEのいくつかのプロファイリング機能を示すデモ。
* link:../../../community/magazine/html/04/profiler.html[+詳細なプロファイリング: 実行理論+]
* link:http://www.javapassion.com/handsonlabs/nbprofilermemory/[+NetBeansプロファイラを使用したメモリー・リークの検索+]
link:http://www.javapassion.com/[+JavaPassionのサイト+]でのハンズオン・ラボ
* link:http://profiler.netbeans.org/index.html[+profiler.netbeans.org+]
NetBeansプロファイラ・プロジェクトのサイト
* link:http://blogs.oracle.com/nbprofiler[+NetBeansプロファイラのブログ+]
* link:http://profiler.netbeans.org/mailinglists.html[+NetBeansプロファイラのメーリング・リスト+]

<<top,先頭>>

