プロパティーへのアクセス

OQL ステートメントを使用して、オブジェクト・フィールドや配列内のオブジェクトなどの Java™ プロパティーにアクセスすることができます。また、OQL ステートメント内で Java メソッドを実行することもできます。

ヒープ・オブジェクトのフィールドへのアクセス

ヒープ・オブジェクトのフィールドには、単純ドット表記を使用してアクセスします。
[ <alias>. ] <field> . <field>. <field>

FROM 節の別名を定義すると、OQL ステートメントが作動している現行オブジェクトを識別できます。フィールドは、ヒープ・ダンプ内の Java オブジェクトの属性です。別名を定義しない場合、フィールドはデフォルトで現行オブジェクトのフィールドのうちの 1 つになります。「インスペクター」ビューを使用して、オブジェクトの使用可能なフィールドに関する情報を見つけることができます。変更の始まりあるいは、この製品の Standard Edition の場合に限り、OQL ビューのオートコンプリート機能の使用で説明するようにオートコンプリート機能を使用します。変更の終わり

次の例では、sjava.lang.String オブジェクトの別名であり、count および value はそのオブジェクトのフィールドです。
SELECT s.count, s.value FROM java.lang.String s

Bean プロパティーへのアクセス

アットマーク (@) を使用した場合、OQL ステートメントは、ヒープ・ダンプ内のオブジェクトを表すために Memory Analyzer が使用する、基礎の Java オブジェクトの属性にアクセスします。これらの属性は、Bean イントロスペクションを使用することによって解決されます。
[ <alias>. ] @<attribute> ...
次の例では、usedHeapSize および retainedHeapSize は、java.lang.String オブジェクト s の属性です。
SELECT s.@usedHeapSize, s.@retainedHeapSize FROM java.lang.String s
次の表に、一般的に使用されるいくつかの Java 属性を示します。変更の始まりこの製品の Standard Edition では、OQL ビューのオートコンプリート機能の使用で説明するように、オートコンプリート機能を使用して、共通の Bean 名を表示することができます。変更の終わり
表 1. 共通の Java 属性
任意のヒープ・オブジェクト 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 キーワードを使用してオブジェクトに変換します。

Java メソッドの呼び出し

中括弧 ( ) を追加すると、OQL ステートメントは、Java メソッド呼び出しとして解釈されます。この呼び出しは、リフレクションを使用することによって実行されます。
[ <alias> . ] <method>( [ <expression>, <expression> ] ) ...
例:
SELECT s.toString(s) FROM java.lang.String s
次の表に、ヒープ・ダンプ内のオブジェクトを表現するために Memory Analyzer によって使用される、基礎の Java オブジェクトに対して使用できるいくつかの一般的な Java メソッドを示します。変更の始まりこの製品の Standard Edition では、OQL ビューのオートコンプリート機能の使用で説明するように、オートコンプリート機能を使用して、いくつかのメソッドを提案することもできます。変更の終わり
ヒープ・オブジェクト IObject メソッド 戻りオブジェクト
${snapshot} ISnapshot
getClasses()
すべてのクラスのコレクション
   
getClassesByName(String name, boolean includeSubClasses)
クラスのコレクション
クラス・オブジェクト IClass
hasSuperClass()
クラスにスーパー・クラスがある場合、結果は TRUE になります
   
isArrayType()
クラスが配列型である場合、結果は TRUE になります
任意のヒープ・オブジェクト IObject
getObjectAddress()
長整数で表されたスナップショット・オブジェクトのアドレス
プリミティブ配列 IPrimitiveArray
getValueAt(int index)
配列からの値
Java プリミティブ配列、Java オブジェクト配列、または (リフレクションで返された) Java リスト [] または List
get(int index)
配列またはリストからの値

配列へのアクセス

変更の始まりプリミティブ配列およびオブジェクト配列にはスナップショットから直接アクセスでき、Java 配列および Java リストにはリフレクティブ・メソッド呼び出しを使用してアクセスできます。この方法で配列にアクセスするには、[index] 表記を使用します。 索引は整数であり、最初の要素の 0 から始まります。 配列が NULL であるか、索引が範囲外である場合、アクセスの結果は null になります。変更の終わり

変更の始まり[index_1:index_2] 表記 (index_1 および index_2 は範囲の最初と最後を示します) を使用することにより、1 つの配列の中の要素の範囲にアクセスすることもできます。負の索引値は、範囲が配列の最後から始まり、逆方向に進むことを示します。そのため、索引値 -1 は配列の最後の要素を指定します。変更の終わり

注: この製品の Web Edition では、配列にアクセスできる手段は、メソッド呼び出しの使用だけです。

プリミティブ配列からの値の読み取り

以下のいずれかの方式を使用して、プリミティブ配列の要素にアクセスできます。
変更の始まり索引表記変更の終わり
変更の始まり
注: この機能は、この製品の Web Edition では使用できません。
例:
SELECT s[2] FROM int[] s WHERE (s.@length > 2)
この例では、少なくとも 3 つの要素を持つすべての int[] 配列から、索引 2 にある要素の値を読み取ります。変更の終わり
メソッド呼び出し
例:
SELECT s.getValueAt(2) FROM int[] s WHERE (s.@length > 2)
この例では、前述の例と同じ結果になります。

オブジェクト配列からのオブジェクトの読み取り

以下のいずれかの方式を使用して、オブジェクト配列の要素にアクセスできます。
変更の始まり索引表記変更の終わり
変更の始まり
注: この機能は、この製品の Web Edition では使用できません。
例:
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 データ型の配列として読み取り、それらの配列の内容をオブジェクトに変換します。

Java 配列からの読み取り

以下のいずれかの方式を使用して、Java 配列の要素にアクセスできます。
変更の始まり索引表記変更の終わり
変更の始まり
注: この機能は、この製品の Web Edition では使用できません。
例:
SELECT s.@GCRoots[2] FROM OBJECTS ${snapshot} s
変更の終わり
メソッド呼び出し
例:
SELECT s.@GCRoots.get(2) FROM OBJECTS ${snapshot} s  WHERE s.@GCRoots.@length > 2

Java リストからの読み取り

以下のいずれかの方式を使用して、Java List オブジェクトの要素にアクセスできます。
変更の始まり索引表記変更の終わり
変更の始まり
注: この機能は、この製品の Web Edition では使用できません。
例:
SELECT s.@GCRoots.subList(1,3)[1] FROM OBJECTS ${snapshot} s
変更の終わり
メソッド呼び出し
例:
SELECT s.@GCRoots.subList(1,3).get(1) FROM OBJECTS ${snapshot} s

組み込み OQL 関数

<function>( <parameter> )

組み込み関数:

関数 説明
toHex(number)
数値を 16 進法 で表示します。
toString(object)
オブジェクトの値 (例えば、String オブジェクトの内容) を返します。
dominators(object)
そのオブジェクトによって直接支配されているオブジェクトを返します。
outbounds(object)
アウトバウンド参照者を返します。
inbounds(object)
インバウンド参照者を返します。
classof(object)
現行オブジェクトのクラスを返します。
dominatorof(object)
直接ドミネーター、または (それが存在しない場合) -1 を返します。
変更の始まり

OQL ビューのオートコンプリート機能の使用

OQL ビューのオートコンプリート機能を使用して、使用可能なオブジェクトのフィールドと属性、およびメソッドの提案を表示することができます。
注: この機能は、この製品の Web Edition では使用できません。
  1. クラス名の後にスペースを 1 つ入力します。コンテキスト情報ボックスにクラス名が表示され、このクラスがアクティブ・クラスとして現在選択されていることが示されます。
  2. SELECT 節または WHERE 節でピリオド (.) またはアットマーク (@) を入力するか、Ctrl+Space を押します。例えば、SELECT 節の別名の後でそのようにします。 リストが表示されます。このリストには、スナップショットのコンテンツを表す重要な Memory Analyzer オブジェクトの、使用可能なフィールド、属性、およびメソッドの提案が含まれています。
  3. リストが表示されている間に入力を開始して、入力したテキストに従ってリストをフィルターに掛けることができます。
  4. リストから項目を選択して Enter キーを押すか、項目をダブルクリックして、その項目を OQL ステートメントに追加します。
変更の終わり


© Copyright IBM Corporation 2011, 2015.
© Copyright 2008, 2015 SAP AG and others. 本製品では Eclipse テクノロジーが採用されています。詳しくは、http://www.eclipse.org を参照してください。