Java Debug Interface

com.sun.jdi
インタフェース ObjectReference

すべてのスーパーインタフェース:
Mirror, Value
既知のサブインタフェースの一覧:
ArrayReference, ClassLoaderReference, ClassObjectReference, StringReference, ThreadGroupReference, ThreadReference

public interface ObjectReference
extends Value

ターゲット VM に現在存在するオブジェクトです。ObjectReference は、そのオブジェクトだけをミラー化します。ObjectReference が現在割り当てられている Field または LocalVariable に固有のオブジェクトではありません。ObjectReference は、いくつかのフィールドまたは変数、あるいはその両方から 0 または 1 つ以上の参照を持つことができます。

ターゲット VM が切断された場合、ObjectReference を直接的または間接的に引数に取る ObjectReference 上の任意のメソッドは、VMDisconnectedException をスローし、VMDisconnectEventEventQueue から読み出せるようになります。

ObjectReference を直接的または間接的に引数に取る ObjectReference 上の任意のメソッドは、ターゲット VM がメモリが不足すると VMOutOfMemoryException をスローします。

ObjectReference を直接的または間接的に引数に取る ObjectReference 上の任意のメソッドは、ミラーオブジェクトがガベージコレクトされた場合に ObjectCollectedException をスローします。

導入されたバージョン:
1.3

フィールドの概要
static int INVOKE_NONVIRTUAL
          非仮想メソッドの呼び出しを実行します。
static int INVOKE_SINGLE_THREADED
          呼び出し側のスレッドだけを再開してメソッドの呼び出しを実行します。
 
メソッドの概要
 void disableCollection()
          このオブジェクトに対するガベージコレクションを回避します。
 void enableCollection()
          このオブジェクトに対するガベージコレクションを許可します。
 int entryCount()
          現在所有しているスレッドが、このオブジェクトのモニターにエントリした回数を返します。
 boolean equals(Object obj)
          指定されたオブジェクトがこの ObjectReference と等しいかどうか比較します。
 Value getValue(Field sig)
          このオブジェクトの指定されたインスタンスまたは static フィールドの値を取得します。
 Map getValues(List fields)
          このオブジェクトの複数のインスタンスまたは static フィールド、あるいはその両方の値を取得します。
 int hashCode()
          この ObjectReference のハッシュコード値を返します。
 Value invokeMethod(ThreadReference thread, Method method, List arguments, int options)
          ターゲット VM 内のこのオブジェクトの指定された Method を呼び出します。
 boolean isCollected()
          ターゲット VM でこのオブジェクトがガベージコレクトされているかどうかを判定します。
 ThreadReference owningThread()
          このオブジェクトのモニターを現在所有するスレッドがある場合は、そのスレッドの ThreadReference を返します。
 ReferenceType referenceType()
          このオブジェクトの型をミラー化する ReferenceType を取得します。
 void setValue(Field field, Value value)
          このオブジェクトのインスタンスフィールドまたは static フィールドの値を設定します。
 long uniqueID()
          この ObjectReference の一意の識別子を返します。
 List waitingThreads()
          このオブジェクトのモニターを現在待機している各スレッドに対して、ThreadReference を含む List を返します。
 
インタフェース com.sun.jdi.Value から継承したメソッド
type
 
インタフェース com.sun.jdi.Mirror から継承したメソッド
toString, virtualMachine
 

フィールドの詳細

INVOKE_SINGLE_THREADED

public static final int INVOKE_SINGLE_THREADED
呼び出し側のスレッドだけを再開してメソッドの呼び出しを実行します。

関連項目:
定数フィールド値

INVOKE_NONVIRTUAL

public static final int INVOKE_NONVIRTUAL
非仮想メソッドの呼び出しを実行します。

関連項目:
定数フィールド値
メソッドの詳細

referenceType

public ReferenceType referenceType()
このオブジェクトの型をミラー化する ReferenceType を取得します。この型は、現在この型を保持するフィールドまたは変数の、宣言された型のサブクラスまたは実装元になります。たとえば、次の文の直後で使用します。

Object obj = new String("Hello, world!");

obj の ReferenceType は、java.lang.Object ではなく、java.lang.String をミラー化します。

オブジェクトの型は不変なので、このメソッドはミラー化されたオブジェクトの寿命の間は常に同じ ReferenceType を返します。

返される ReferenceType は、ClassType または ArrayType です。InterfaceType は返されません。

戻り値:
このオブジェクトの ReferenceType

getValue

public Value getValue(Field sig)
このオブジェクトの指定されたインスタンスまたは static フィールドの値を取得します。Field は、この ObjectReference に対して有効である必要があります。つまり、Field は、ミラー化されたオブジェクトのクラスのフィールド、またはそのクラスのスーパークラスのフィールドである必要があります。

パラメータ:
sig - 要求された値を含むフィールド
戻り値:
インスタンスのフィールドの Value
例外:
IllegalArgumentException - フィールドがこのオブジェクトのクラスとして有効でない場合

getValues

public Map getValues(List fields)
このオブジェクトの複数のインスタンスまたは static フィールド、あるいはその両方の値を取得します。Field は、この ObjectReference に対して有効である必要があります。つまり、Field は、ミラー化されたオブジェクトのクラスのフィールド、またはそのクラスのスーパークラスのフィールドである必要があります。

パラメータ:
fields - 要求された値を含む Field オブジェクトのリスト
戻り値:
要求された Field オブジェクトとその Value のマップ
例外:
IllegalArgumentException - このオブジェクトのクラスに無効なフィールドがある場合

setValue

public void setValue(Field field,
                     Value value)
              throws InvalidTypeException,
                     ClassNotLoadedException
このオブジェクトのインスタンスフィールドまたは static フィールドの値を設定します。 Field は、この ObjectReference に対して有効である必要があります。つまり、 このオブジェクトからフィールドの型への、ワイド型参照変換が行われる必要があります。 static の場合は、フィールドは final ではあってはなりません。

オブジェクトの値は、このフィールドの型への代入互換性を持たなければなりません (これは、このフィールド型は、囲むクラスのクラスローダによってロードする必要があることを意味する)。プリミティブ値は、このフィールドの型への代入互換性を持つか、情報を失わずにこのフィールドの型に変換できる必要があります。代入互換性の詳細は、 JavaTM Language Specification のセクション 5.2 を参照してください。

パラメータ:
field - 要求された値を含むフィールド
value - 代入する新しい値
例外:
IllegalArgumentException - フィールドがこのオブジェクトのクラスとして有効でない場合
InvalidTypeException - 値の型がフィールドの型に一致しない場合
ClassNotLoadedException - フィールドの型が、適切なクラスローダによってロードされていない場合

invokeMethod

public Value invokeMethod(ThreadReference thread,
                          Method method,
                          List arguments,
                          int options)
                   throws InvalidTypeException,
                          ClassNotLoadedException,
                          IncompatibleThreadStateException,
                          InvocationException
ターゲット VM 内のこのオブジェクトの指定された Method を呼び出します。指定するメソッドは、このオブジェクトのクラス、このオブジェクトのクラスのスーパークラス、またはこのオブジェクトによって実装されたインタフェース内で定義できます。このメソッドには、static メソッドまたはインスタンスメソッドを指定できますが、static 初期化子や static コンストラクタを指定することはできません。新規オブジェクトの生成およびそのコンストラクタの実行には、ClassType.newInstance(com.sun.jdi.ThreadReference, com.sun.jdi.Method, java.util.List, int) を使用します。

メソッドの呼び出しは、指定されたスレッド内で行われます。指定されたスレッドがそのスレッド内で発生したイベントにより中断される場合にのみ、メソッドの呼び出しを行います。ターゲット VM が VirtualMachine.suspend() を使って中断された場合、または指定されたスレッドが ThreadReference.suspend() を使って中断された場合、メソッドの呼び出しはサポートされません

指定されたメソッドは、指定された引数リスト内の引数を使って呼び出されます。メソッドの呼び出しは、同期をとられます。呼び出されたメソッドがターゲット VM で復帰するまで、このメソッドは復帰しません。 呼び出されたメソッドの戻り値の型が void 以外の型である場合、戻り値のミラーはこのメソッドによって返されます。それ以外の場合、null が返されます。呼び出されたメソッドが例外をスローする場合、このメソッドは、スローされた例外オブジェクトに対するミラーを含む InvocationException をスローします。

オブジェクト引数は、この引数型への代入互換性を持たなければなりません (これは、この引数型は、囲むクラスのクラスローダによってロードする必要があることを意味する)。プリミティブ引数は、この引数型への代入互換性を持つか、情報を失わずにこの引数型に変換できる必要があります。代入互換性の詳細は、 Java Language Specification のセクション 5.2 を参照してください。

デフォルトでは、このメソッドは、動的ルックアップを使用して呼び出されます (Java Language Specification 第 2 版のセクション 15.12.4.4 を参照)。特に、この ObjectReference によってミラー化されたオブジェクトの、実行時の型に基づいてオーバライドが発生します。 この動作は、options 引数に INVOKE_NONVIRTUAL ビットフラグを指定して変更できます。このフラグを設定すると、このオブジェクトの実行時の型に対してオーバライドが発生するかどうかにかかわらず、指定されたメソッドが呼び出されます。この場合、メソッドは、インタフェースに属していたり、abstract であったりしてはなりません。このオプションは、Java プログラミング言語の super キーワードで実行されるようなメソッドの呼び出しに使用します。

デフォルトでは、ターゲット VM 内のすべてのスレッドは、そのスレッドがイベントまたは VirtualMachine.suspend()ThreadReference.suspend() によって以前に中断された場合、メソッドの呼び出し中に再開されます。 これは、呼び出されたメソッドが必要とするモニターをいずれかのスレッドが所有する場合に発生するデッドロックを回避するために行われます。呼び出し中にブレークポイントまたは他のイベントが発生する可能性があります。 ただし、この暗黙の再開は、ThreadReference.resume() と同じように行われるため、スレッドの中断カウントが 1 を超える場合には、呼び出しの間、スレッドは中断状態になることに留意してください。デフォルトでは、呼び出しが完了すると、ターゲット VM 内のすべてのスレッドは、呼び出し前の状態に関係なく中断されます。

呼び出し中に他のスレッドが再開されるのを防止するには、options 引数に INVOKE_SINGLE_THREADED ビットフラグを指定します。ただし、このオプションでは、デッドロックを回避したり、デッドロックから回復することはできないので、慎重に使用する必要があります。指定されたスレッドだけが再開されます (すべてのスレッドは再開されない)。単一スレッド呼び出しの完了時には、呼び出し側 のスレッドは再度中断されます。単一スレッド呼び出し中に開始されたスレッドは、 その単一スレッド呼び出しの完了時には中断されません。

呼び出し中にターゲット VM が切断された (たとえば、VirtualMachine.dispose() によって) 場合でも、メソッドの呼び出しは続行されます。

パラメータ:
thread - 呼び出しを行うスレッド
method - 呼び出す Method
arguments - 呼び出されるメソッドにバインドされた Value 引数のリスト。リストから取得した値は、メソッドシグニチャーに指定されている順序で引数に代入される
options - 整数ビットフラグオプション
戻り値:
呼び出されたメソッドの戻り値の Value のミラー
例外:
IllegalArgumentException - メソッドがこのオブジェクトのクラスのメンバでない場合、引数リストのサイズがこのメソッドに対して宣言された引数の数に一致しない場合、このメソッドがコンストラクタまたは static 初期化子である場合、あるいは INVOKE_NONVIRTUAL が指定され、メソッドが abstract またはインタフェースメンバである場合
{@link - InvalidTypeException} 対応するメソッドの引数型に代入できない引数が引数リストにある場合
ClassNotLoadedException - 引数型が、適切なクラスローダによってロードされていない場合
IncompatibleThreadStateException - 指定されたスレッドが、イベントによって中断されていない場合
InvocationException - メソッドの呼び出しにより、ターゲット VM で例外が発生した場合
InvalidTypeException - 引数が以下の条件を満たさない場合 -- オブジェクト引数は、この引数型への代入互換性を持たなければなりません (これは、この引数型は、囲むクラスのクラスローダによってロードする必要があることを意味する)。プリミティブ引数は、この引数型への代入互換性を持っているか、情報を失わずにこの引数型に変換できる必要があります。代入互換性の詳細は、Java 言語仕様のセクション 5.2 を参照してください

disableCollection

public void disableCollection()
このオブジェクトに対するガベージコレクションを回避します。デフォルトでは、JDI が 返すすべての ObjectReference 値は、ターゲット VM の実行時の任意の時点でベージコレクトされます。このメソッドの呼び出しは、オブジェクトがガベージコレクトされないことを保証します。enableCollection() を使用すると、ガベージコレクションを再開できます。

このメソッドの呼び出しは、カウントされます。このメソッドを呼び出すたびに、ガベージコレクションを再開するには、enableCollection() を呼び出す必要があります。

ターゲット VM が中断されている間は、すべてのスレッドが中断されるので、ガベージコレクションは行われません。中断されているときでも、変数、フィールド、および配列の標準の検査は行われます。ガベージコレクションを明示的に無効にする

このメソッドは、できるだけ使用しないでください。このメソッドを使用すると、ターゲット VM のガベージコレクションの動作が変わり、デバッガ環境のアプリケーションの動作がデバッグしていないときの動作と異なることがあるためです。


enableCollection

public void enableCollection()
このオブジェクトに対するガベージコレクションを許可します。デフォルトでは、JDI が返すすべての ObjectReference 値は、ターゲット VM の実行時の任意の時点でガベージコレクトされます。このメソッドの呼び出しは、ガベージコレクションが disableCollection() で無効になっている場合にだけ必要です。


isCollected

public boolean isCollected()
ターゲット VM でこのオブジェクトがガベージコレクトされているかどうかを判定します。

戻り値:
この ObjectReference がガベージコレクトされている場合は true、そうでない場合は false

uniqueID

public long uniqueID()
この ObjectReference の一意の識別子を返します。この識別子によって、同じ VM の破棄されていないすべての ObjectReference が一意であることが保証されます。これは、この ObjectReference が破棄されるまで保証されます。

戻り値:
long 型の一意の ID

waitingThreads

public List waitingThreads()
                    throws IncompatibleThreadStateException
このオブジェクトのモニターを現在待機している各スレッドに対して、ThreadReference を含む List を返します。モニターを待機していると見なされるスレッドの状態については、ThreadReference.currentContendedMonitor() を参照してください。

この操作は、ターゲット VM でサポートされていないことがあります。この操作がサポートされているかどうかを確認するには、「VirtualMachine#canGetMonitorInfo」を参照してください。

戻り値:
ThreadReference オブジェクトの List。モニターを待機しているスレッドが存在しない場合、リストの長さはゼロになる
例外:
UnsupportedOperationException - ターゲット VM でこの操作がサポートされていない場合
IncompatibleThreadStateException - ターゲット VM に中断されていない待機中のスレッドがある場合

owningThread

public ThreadReference owningThread()
                             throws IncompatibleThreadStateException
このオブジェクトのモニターを現在所有するスレッドがある場合は、そのスレッドの ThreadReference を返します。所有権の定義については、ThreadReference.ownedMonitors() を参照してください。

この操作は、ターゲット VM でサポートされていないことがあります。この操作がサポートされているかどうかを確認するには、「VirtualMachine#canGetMonitorInfo」を参照してください。

戻り値:
モニターを現在所有する ThreadReference。モニターが所有されていない場合は null
例外:
UnsupportedOperationException - ターゲット VM でこの操作がサポートされていない場合
IncompatibleThreadStateException - 所有するスレッドがターゲット VM で中断されてない場合

entryCount

public int entryCount()
               throws IncompatibleThreadStateException
現在所有しているスレッドが、このオブジェクトのモニターにエントリした回数を返します。所有権の定義については、ThreadReference.ownedMonitors() を参照してください。

この操作は、ターゲット VM でサポートされていないことがあります。この操作がサポートされているかどうかを確認するには、「VirtualMachine#canGetMonitorInfo」を参照してください。

戻り値:
整数型のエントリカウント
例外:
UnsupportedOperationException - ターゲット VM でこの操作がサポートされていない場合
IncompatibleThreadStateException - 所有するスレッドがターゲット VM で中断されてない場合
関連項目:
owningThread()

equals

public boolean equals(Object obj)
指定されたオブジェクトがこの ObjectReference と等しいかどうか比較します。

オーバーライド:
クラス Object 内の equals
戻り値:
オブジェクトが ObjectReference で、両方の ObjectReference が同じ VM に属しているとき、その VM でミラー化されたオブジェクトに対して 「==」演算子を適用したときの評価が true の場合は true

hashCode

public int hashCode()
この ObjectReference のハッシュコード値を返します。

オーバーライド:
クラス Object 内の hashCode
戻り値:
整数のハッシュコード

Java Debug Interface