OQL ステートメントを使用して、オブジェクト・フィールドや配列内のオブジェクトなどの Java™ プロパティーにアクセスすることができます。また、OQL ステートメント内で Java メソッドを実行することもできます。
[ <alias>. ] <field> . <field>. <field>
FROM 節の別名を定義すると、OQL ステートメントが作動している現行オブジェクトを識別できます。フィールドは、ヒープ・ダンプ内の Java オブジェクトの属性です。別名を定義しない場合、フィールドはデフォルトで現行オブジェクトのフィールドのうちの 1 つになります。「インスペクター」ビューを使用して、オブジェクトの使用可能なフィールドに関する情報を見つけることができます。
あるいは、この製品の Standard Edition の場合に限り、OQL ビューのオートコンプリート機能の使用で説明するようにオートコンプリート機能を使用します。
SELECT s.count, s.value FROM java.lang.String s
[ <alias>. ] @<attribute> ...
SELECT s.@usedHeapSize, s.@retainedHeapSize FROM java.lang.String s
この製品の Standard Edition では、OQL ビューのオートコンプリート機能の使用で説明するように、オートコンプリート機能を使用して、共通の Bean 名を表示することができます。
| 任意のヒープ・オブジェクト | IObject | objectId | スナップショット・オブジェクトの ID |
|---|---|---|---|
| objectAddress | スナップショット・オブジェクトのアドレス | ||
| class | このオブジェクトの Java クラス | ||
| clazz | このオブジェクトの IClass。classof(object) も参照してください。 | ||
| usedHeapSize | シャロー・ヒープ・サイズ | ||
| retainedHeapSize | 保存ヒープ・サイズ | ||
| displayName | 表示名 | ||
| クラス・オブジェクト | IClass | classLoaderId | クラス・ローダーの ID |
| 任意の配列 | IArray | length | 配列の長さ |
| プリミティブ配列 | IPrimitiveArray | valueArray | 配列の値 |
| 参照配列 | IObjectArray | referenceArray | 配列内のオブジェクト (long 値で表されたオブジェクトのアドレス)。 get() メソッドを使用して特定の要素にアクセスしてから、OBJECTS キーワードを使用してオブジェクトに変換します。 |
[ <alias> . ] <method>( [ <expression>, <expression> ] ) ...
SELECT s.toString(s) FROM java.lang.String s
この製品の Standard Edition では、OQL ビューのオートコンプリート機能の使用で説明するように、オートコンプリート機能を使用して、いくつかのメソッドを提案することもできます。
| ヒープ・オブジェクト | IObject | メソッド | 戻りオブジェクト |
|---|---|---|---|
| ${snapshot} | ISnapshot |
|
すべてのクラスのコレクション |
|
クラスのコレクション | ||
| クラス・オブジェクト | IClass |
|
クラスにスーパー・クラスがある場合、結果は TRUE になります |
|
クラスが配列型である場合、結果は TRUE になります | ||
| 任意のヒープ・オブジェクト | IObject |
|
長整数で表されたスナップショット・オブジェクトのアドレス |
| プリミティブ配列 | IPrimitiveArray |
|
配列からの値 |
| Java プリミティブ配列、Java オブジェクト配列、または (リフレクションで返された) Java リスト | [] または List |
|
配列またはリストからの値 |
プリミティブ配列およびオブジェクト配列にはスナップショットから直接アクセスでき、Java 配列および Java リストにはリフレクティブ・メソッド呼び出しを使用してアクセスできます。この方法で配列にアクセスするには、[index] 表記を使用します。
索引は整数であり、最初の要素の 0 から始まります。
配列が NULL であるか、索引が範囲外である場合、アクセスの結果は null になります。
[index_1:index_2] 表記 (index_1 および index_2 は範囲の最初と最後を示します) を使用することにより、1 つの配列の中の要素の範囲にアクセスすることもできます。負の索引値は、範囲が配列の最後から始まり、逆方向に進むことを示します。そのため、索引値 -1 は配列の最後の要素を指定します。
索引表記

SELECT s[2] FROM int[] s WHERE (s.@length > 2)
この例では、少なくとも 3 つの要素を持つすべての int[] 配列から、索引 2 にある要素の値を読み取ります。
SELECT s.getValueAt(2) FROM int[] s WHERE (s.@length > 2)
この例では、前述の例と同じ結果になります。
索引表記

SELECT s[2] FROM java.lang.Object[] s WHERE (s.@length > 2)
この例では、少なくとも 3 つの要素を持つすべての Object 配列から、索引 2 にある要素を読み取ります。s[2] コードによって参照される要素は IObject オブジェクトであるため、フィールドおよび Java Bean プロパティーにアクセスできます。SELECT OBJECTS s[2] FROM java.lang.Object[] s
この例では、OBJECTS キーワードはオブジェクトを変換して、表の結果ではなくツリー表示を示します。範囲外のアクセスでは null が返され、OBJECTS キーワードは null 値を無視するため、WHERE 節は必要ありません。
SELECT OBJECTS s.@referenceArray.get(2) FROM java.lang.Object[] s WHERE (s.@length > 2)
この例では、少なくとも 3 つの要素を持つすべての Object 配列から、索引 2 にある要素を long データ型のアドレスとして読み取り、その結果をオブジェクトに変換します。SELECT OBJECTS s.getReferenceArray(2,1) FROM java.lang.Object[] s WHERE (s.@length > 2)
この例では、少なくとも 3 つの要素を持つすべての Object 配列から、索引 2 から始まる 1 つの要素を long データ型の配列として読み取り、それらの配列の内容をオブジェクトに変換します。
索引表記

SELECT s.@GCRoots[2] FROM OBJECTS ${snapshot} s

SELECT s.@GCRoots.get(2) FROM OBJECTS ${snapshot} s WHERE s.@GCRoots.@length > 2
索引表記

SELECT s.@GCRoots.subList(1,3)[1] FROM OBJECTS ${snapshot} s

SELECT s.@GCRoots.subList(1,3).get(1) FROM OBJECTS ${snapshot} s
<function>( <parameter> )
組み込み関数:
| 関数 | 説明 |
|---|---|
|
数値を 16 進法 で表示します。 |
|
オブジェクトの値 (例えば、String オブジェクトの内容) を返します。 |
|
そのオブジェクトによって直接支配されているオブジェクトを返します。 |
|
アウトバウンド参照者を返します。 |
|
インバウンド参照者を返します。 |
|
現行オブジェクトのクラスを返します。 |
|
直接ドミネーター、または (それが存在しない場合) -1 を返します。 |

