ヒープ・ウィンドウ
このウィンドウでは、デバッグ中のプログラムのヒープに存在するオブジェクトおよび配列に関する情報を表示します。このウィンドウに表示される列は、「ツール」->「設定」->「デバッガ」->「ヒープ」、またはヒープ・ウィンドウを右クリックすると表示されるポップアップ・メニュー・オプションから「設定」を選択し、有効にした列設定によって決まります。ポップアップ・メニュー・オプションについては後述します。
Javaでは、一般にガベージ・コレクタと呼ばれる自動メモリー管理システムが使用されます。オブジェクトが使用されなくなると、ガベージ・コレクタによって自動的に再生されます。調査を始める前に、ガベージ・コレクション・システムが、参照されていないオブジェクトを再生するように設定されていることを確認してください。ヒープ・ウィンドウを使用する前に、ツールバーの「ガベージ・コレクション」アイコン(
)をクリックします。これで、未使用のオブジェクトがヒープから削除されます。
注意:
- ヒープ情報を提供するのは、JDeveloperのOracle Java Virtual Machine(OJVM)のみです。ヒープ情報は、Sun社のJava Platform Debugger Architecture(JPDA)、ClassicおよびHotSpot Java Virtual Machineで使用されているデバッグ・プロトコルでは提供されません。ClassicまたはHotSpot仮想マシンを使用している場合(VMは「プロジェクト」->「プロジェクトの設定 - 実行」パネルで指定)、ヒープ・ウィンドウには、デバッグ中のプログラムのヒープに関する情報は表示されません。
- ヒープ・ウィンドウは、PL/SQLおよびJavaストアド・プロシージャのデバッグには適用されません。
ヒープ・ウィンドウには、クラス・フォルダと参照パス・フォルダという2種類のフォルダがあります。
クラス・フォルダ
クラス・フォルダでは、デバッグ中のプログラムのヒープに存在する特定のクラスまたは配列型のインスタンスをすべて参照できます。たとえば、ヒープに存在するjava.awt.Rectangle
のすべてのインスタンスを参照できます。
次のいずれかの方法で、クラス・フォルダを作成できます。
- ヒープ・ウィンドウを右クリックし、「クラス・フォルダの追加」を選択します。
- クラス・ウィンドウからクラスをドラッグ・アンド・ドロップします。
- データ・ウィンドウからオブジェクトまたは配列をドラッグ・アンド・ドロップします。
ヒープ・ウィンドウの一番下に、クラス名とフォルダに含まれるインスタンス数のラベルの付いた新規フォルダが追加されます。新規フォルダを開くと、インスタンスごとに子ノードが表示されます。インスタンスのメモリー・アドレスは、各子ノードの名前の列に表示されます。
参照パス・フォルダ
参照パス・フォルダでは、特定のオブジェクトがまだヒープに存在し、ガベージ・コレクタによって再生されない理由を確認できます。ヒープ・ウィンドウの参照パス・フォルダには、ヒープに存在する特定オブジェクトへの参照パスがすべて含まれます。オブジェクトへの参照パスがない場合、オブジェクトはガベージ・コレクタによって再生されます。
参照パスはルート参照から始まります。通常、ルート参照は、Java Native Interface(JNI)によって確保されたスタック変数、staticフィールドまたはオブジェクトです。ガベージ・コレクション・システムの実装の詳細により、スレッド・レジスタまたはスタック領域がルート参照になることもあります。ヒープ・ウィンドウに表示される参照パスには、ルート参照、およびルート参照と調査中の特定オブジェクト間の参照の連鎖が示されます。
参照パス・フォルダを作成するには、クラス・フォルダが存在している必要があります(クラス・フォルダの作成手順については、前述の説明を参照してください)。クラス・フォルダを開き、インスタンス(クラス・フォルダの子ノード)を調べます。調査するインスタンスを1つ選択します。このオブジェクトをターゲット・オブジェクトと呼びます。ターゲット・オブジェクトを右クリックし、ポップアップ・メニューから「参照パスの表示」を選択します。「<instance address>への参照パス」というラベルが付いた新規フォルダが、ヒープ・ウィンドウの一番下に追加されます。新規フォルダを開くと、ターゲット・オブジェクトへの各ルート参照ごとに子ノードが表示されます。ルート参照からターゲット・オブジェクトまでの連鎖の深さは、「値」列に表示されます。参照パスをルート参照からターゲット・オブジェクトまで完全に拡張するには、ルート参照を右クリックし、「参照パスの拡張」を選択します。
ヒープ・ウィンドウから次のポップアップ・メニュー・オプションを選択して、ヒープ・ウィンドウで現在選択されているノードに適用できます。
- 参照パスの表示
- クラス・フォルダ内でインスタンス・ノードを選択している場合に使用できます。ヒープ・ウィンドウの一番下に、選択したインスタンスの参照パス・フォルダが追加されます。
- 参照パスの拡張
- 参照パス内の参照ルートまたはオブジェクトを選択している場合に使用できます。選択したオブジェクトからターゲット・オブジェクトまでの最短のパスを拡張します。
- クラス名を変更
- 「クラス・フォルダ名の変更」ダイアログを表示します。このダイアログでは、ヒープ・ウィンドウの既存クラス・フォルダを編集できます。たとえば、入力ミスをした場合や誤ったクラスを指定した場合に、クラスの名前を編集します。
- フォルダの削除
- クラス・フォルダまたは参照パス・フォルダを選択している場合に使用できます。ヒープ・ウィンドウからフォルダを削除します。
- 全値の表示
- モーダル・ダイアログ・ボックスの複数行テキスト・フィールドに値全体を表示します。String、byte配列、char配列、short配列、int配列およびlong配列に使用できます。
- 範囲の調整
- ノードを開いたときに表示する選択配列の要素数を制御します。配列にのみ使用できます。
- 値の切替え
- (ブールにのみ適用。)ブール・データ項目の値を変更します。値が
true
の場合、このオプションを選択するとfalse
に変更されます。値がfalse
の場合、このオプションを選択するとtrue
に変更されます。
- 値の変更
- 「値の変更」ダイアログを表示します。このダイアログでは、選択したデータ項目の値を変更できます。
- <オブジェクトの型>のソースを表示
- 選択したデータ項目の型がクラスの場合のみ使用できます。配列またはプリミティブ型の場合は使用できません。コード・エディタにクラスのソース・コードを表示します。
- 注意: 「宣言済の型」列が表示され、宣言された型が実際の型と異なる場合、ポップアップ・メニューには、実際の型と宣言された型に対する2つの「ソースを表示」オプションが表示されます。
- フィルタの使用
- 「フィルタの編集」ダイアログで設定したクラス・フィルタを、「フィルタ対象クラス」リストから削除せずに有効または無効にできます。
- <オブジェクトの型>のフィルタの編集
- 特定のクラスに対する「フィルタの編集」ダイアログに直接移動し、オブジェクトを開いたときに表示するフィールドと表示しないフィールドを制御するフィルタを設定できます。
- フィルタの編集
- 「フィルタの編集」ダイアログに直接移動し、オブジェクトを開いたときに表示するフィールドと表示しないフィールドを制御するフィルタを設定できます。
- クラス・フォルダの追加
- 「クラス・フォルダの追加」ダイアログを表示します。このダイアログでは、ヒープ・ウィンドウに新規クラス・フォルダを追加できます。
- すべてのフォルダを削除
- ヒープ・ウィンドウからすべてのフォルダ(クラス・フォルダおよび参照パス・フォルダ)を削除します。
- 設定
- 「ツール」->「設定」->「デバッガ」->「ヒープ」を表示します。ここで、ヒープ・ウィンドウに表示する列および他の表示オプションを選択できます。
- すべて折りたたむ
- すべてのブランチを縮小し、ブランチの下にあるデータを非表示にします。
- 注意: ヒープ・ウィンドウのポップアップ・メニューには、「すべて展開」オプションはありません。これは、完全なツリーには非常に多くのブランチが含まれる場合があり、またデータ項目に循環参照が含まれていると、ブランチを拡張したときにデバッガが無限ループに入る可能性があるためです。
- エクスポート
- 現在のヒープ・ウィンドウの内容を、テキスト・ファイルまたはHTMLファイルに保存します。
- テキスト・ファイルにエクスポートする場合は、.html拡張子または
.htm
拡張子を付けずに名前を入力します。出力ファイルでは、列の間にタブが、行の間に新しい行が挿入されます。
- HTMLファイルにエクスポートする場合は、.html拡張子または
.htm
拡張子(大/小文字の区別なし)を付けて名前を入力します。出力ファイルは、列を使用して編成された表になります。
関連項目
- デバッガ・ウィンドウについて
- クラス・ウィンドウについて
- デバッガのアイコンについて
- リモート・デバッグについて
- プロジェクトをデバッグ用に設定
- Oracle Technology Networkのデバッガ・ビューレット: http://otn.oracle.com/products/jdev/viewlets/viewlet.html