- 既知のすべてのサブインタフェース:
ArrayReference
,ClassLoaderReference
,ClassObjectReference
,ModuleReference
,StringReference
,ThreadGroupReference
,ThreadReference
Field
やLocalVariable
に固有のオブジェクトではありません。 ObjectReferenceは、いくつかのフィールドまたは変数、あるいはその両方から0または1つ以上の参照を持つことができます。
ObjectReference
を直接的または間接的にパラメータとするObjectReference
のメソッドは、ターゲットVMが切断され、VMDisconnectEvent
がEventQueue
から読み取られているか、または読み取られている場合はVMDisconnectedException
をスローする可能性があります。
直接または間接にObjectReference
をパラメータとするObjectReference
のメソッドは、ターゲットVMのメモリーが不足している場合はVMOutOfMemoryException
をスローする可能性があります。
ObjectReference
を直接的または間接的にパラメータに取るObjectReference
上の任意のメソッドは、ミラー・オブジェクトがガベージ・コレクトされた場合にObjectCollectedException
をスローします。
- 導入されたバージョン:
- 1.3
-
フィールドのサマリー
修飾子と型フィールド説明static final int
非仮想メソッドの呼出しを実行します。static final int
呼出し側のスレッドだけを再開してメソッドの呼出しを実行します。 -
メソッドのサマリー
修飾子と型メソッド説明void
このオブジェクトに対するガベージ・コレクションを回避します。void
このオブジェクトのガベージ・コレクションを許可します。int
現在所有しているスレッドが、このオブジェクトのモニターにエントリした回数を返します。boolean
指定されたObjectがこのObjectReferenceと等しいかどうか比較します。このオブジェクトの指定されたインスタンスまたはstaticフィールドの値を取得します。このオブジェクトの複数のインスタンスまたはstaticフィールド、あるいはその両方の値を取得します。int
hashCode()
このObjectReferenceのハッシュ・コード値を返します。invokeMethod
(ThreadReference thread, Method method, List<? extends Value> arguments, int options) ターゲットVM内のこのオブジェクトで指定されたMethod
を呼び出します。boolean
ターゲットVMでこのオブジェクトがガベージ・コレクトされているかどうかを判定します。このオブジェクトのモニターを現在所有するスレッドがある場合は、そのスレッドのThreadReference
を返します。このオブジェクトの型をミラー化するReferenceType
を取得します。referringObjects
(long maxReferrers) このオブジェクトを直接参照するオブジェクトを返します。void
このオブジェクトのインスタンス・フィールドまたはstaticフィールドの値を設定します。long
uniqueID()
このObjectReferenceの一意の識別子を返します。このオブジェクトのモニターを現在待機している各スレッドのThreadReference
を含むリストを返します。インタフェースcom.sun.jdi.Mirrorで宣言されたメソッド
toString, virtualMachine
-
フィールド詳細
-
INVOKE_SINGLE_THREADED
static final int INVOKE_SINGLE_THREADED呼出し側のスレッドだけを再開してメソッドの呼出しを実行します。- 関連項目:
-
INVOKE_NONVIRTUAL
static final int INVOKE_NONVIRTUAL非仮想メソッドの呼出しを実行します。- 関連項目:
-
-
メソッドの詳細
-
referenceType
ReferenceType referenceType()このオブジェクトの型をミラー化するReferenceType
を取得します。 この型は、現在この型を保持するフィールドまたは変数の、宣言された型のサブクラスまたは実装元になります。 たとえば、次の文の直後で使用します。Object obj = new String("Hello, world!");
objのReferenceTypeは、java.lang.Objectではなく、java.lang.Stringをミラー化します。
オブジェクトの型は不変なので、このメソッドはミラー化されたオブジェクトの寿命の間は常に同じReferenceTypeを返します。
返されるReferenceTypeは、
ClassType
またはArrayType
です。InterfaceType
は返されません。- 戻り値:
- このオブジェクトの
ReferenceType
。
-
getValue
このオブジェクトの指定されたインスタンスまたはstaticフィールドの値を取得します。 Fieldは、このObjectReferenceに対して有効である必要があります。つまり、Fieldは、ミラー化されたオブジェクトのクラスのフィールド、またはそのクラスのスーパー・クラスのフィールドである必要があります。- パラメータ:
sig
- 要求された値を含むフィールド- 戻り値:
- インスタンス・フィールドの
Value
。 - 例外:
IllegalArgumentException
- フィールドがこのオブジェクトのクラスにとって有効でない場合。
-
getValues
このオブジェクトの複数のインスタンスまたはstaticフィールド、あるいはその両方の値を取得します。 Fieldは、このObjectReferenceに対して有効である必要があります。つまり、Fieldは、ミラー化されたオブジェクトのクラスのフィールド、またはそのクラスのスーパー・クラスのフィールドである必要があります。- パラメータ:
fields
- 要求された値を含むField
オブジェクトのリスト。- 戻り値:
Value
を含む、要求されたField
オブジェクトのマップ。- 例外:
IllegalArgumentException
- このオブジェクトのクラスにとって無効なフィールドがある場合。
-
setValue
void setValue(Field field, Value value) throws InvalidTypeException, ClassNotLoadedException このオブジェクトのインスタンス・フィールドまたはstaticフィールドの値を設定します。Field
は、このObjectReferenceに対して有効である必要があります。つまり、Fieldは、ミラー化されたオブジェクトのクラスのフィールド、またはそのクラスのスーパー・クラスのフィールドである必要があります。 フィールドはfinalであってはいけません。オブジェクトの値は、このフィールドの型への代入互換性を持たなければいけません(これは、このフィールド型は、囲むクラスのクラス・ローダーによってロードする必要があることを意味する)。 プリミティブ値は、このフィールドの型への代入互換性を持つか、情報を失わずにこのフィールドの型に変換できる必要があります。 割当ての互換性の詳細は、「Java言語仕様」の5.2に関する項を参照してください。
- パラメータ:
field
- 要求された値を含むフィールドvalue
- 代入する新しい値- 例外:
IllegalArgumentException
- フィールドがこのオブジェクトのクラスに対して有効でないか、フィールドがfinalの場合。InvalidTypeException
- 値の型がフィールドの型に一致しない場合。ClassNotLoadedException
- valueがnullでなく、適切なクラス・ローダーによるフィールドの型のロードがまだ行われていない場合。VMCannotBeModifiedException
- VirtualMachineが読取り専用の場合(VirtualMachine.canBeModified()
を参照)。
-
invokeMethod
Value invokeMethod(ThreadReference thread, Method method, List<? extends Value> 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<? extends com.sun.jdi.Value>, int)
を使用します。メソッド呼出しは、指定されたスレッドで実行されます。 指定されたスレッドがそのスレッド内で発生したイベントにより中断される場合にのみ、メソッドの呼出しを行います。 ターゲットVMが
VirtualMachine.suspend()
によって中断された場合、または指定されたスレッドがThreadReference.suspend()
によって中断された場合、メソッドの呼出しはサポートされません。指定されたメソッドは、指定された引数リスト内の引数を使用して呼び出されます。 メソッドの呼出しは、同期をとられます。呼び出されたメソッドがターゲットVMで復帰するまで、このメソッドは復帰しません。 呼び出されたメソッドが例外をスローする場合、このメソッドはスローされた例外オブジェクトに対するミラーを含む
InvocationException
をスローします。オブジェクト引数は、この引数型への代入互換性を持たなければいけません(これは、この引数型は、囲むクラスのクラス・ローダーによってロードする必要があることを意味する)。 プリミティブ引数は、この引数型への代入互換性を持っているか、情報を失わずにこの引数型に変換できる必要がある。 呼び出されているメソッドが引数の可変数を受け取る場合、最後の引数型が特定の要素型の配列になります。 一致する位置にある引数は、省略される(つまりnullとなる)可能性や、あるいは、同じ要素型の配列になる(つまり、同じ型のほかの引数の任意の数が続く要素型の引数となる)可能性があります。 引数が省略される場合は、配列の長さがゼロである要素型が渡されます。 要素型はプリミティブ型である可能性もあります。 自動ボックス化はサポートされていません。 割当ての互換性の詳細は、「Java言語仕様」の5.2に関する項を参照してください。
デフォルトでは、「Java言語仕様」の15.12.4.4の項で説明されているように、このメソッドは動的ルックアップを使用して呼び出されます。特に、この
ObjectReference
によってミラー化されたオブジェクトの実行時タイプに基づいてオーバーライドされます。 この動作を変更するには、options
引数にINVOKE_NONVIRTUAL
ビット・フラグを指定します。 このフラグを設定すると、このオブジェクトの実行時の型に対してオーバーライドが発生するかどうかにかかわらず、指定されたメソッドが呼び出されます。 この場合、メソッドにクラスまたはインタフェースの実装が含まれている必要があります。 このオプションは、Javaプログラミング言語のsuper
キーワードで実行されるようなメソッドの呼出しに使用します。デフォルトでは、ターゲットVM内のすべてのスレッドがメソッドの呼出し中に再開されます(イベントや
VirtualMachine.suspend()
またはThreadReference.suspend()
によって以前に中断されたスレッドの場合)。 これは、呼び出されたメソッドで必要とされるリソース(モニターなど)を所有しているスレッドがある場合に発生するデッドロックを防ぐために行われます。 ただし、この暗黙の再開は、ThreadReference.resume()
とまったく同様に行われるため、スレッドの中断カウントが1を超える場合は、呼出し中にスレッドが再開されません。このため、デッドロックが発生する可能性があることに留意してください。 デフォルトでは、ターゲットVM内のすべてのスレッドは、呼出しの完了時に中断します(呼出し前のスレッドの状態とは無関係)。 ブレークポイントまたはほかのイベントが、呼出し中に発生する可能性があります。 この場合、前述したデッドロックが発生することがあります。 また、invokeMethodがクライアントのイベント・ハンドラ・スレッドから呼び出された場合も、デッドロックが発生することがあります。 この場合、このスレッドはinvokeMethodが完了するまで待機するので、新規イベントの発生に伴うEventSetの読取りを行いません。 この新規EventSetがSUSPEND_ALLである場合、EventSetが再開されないので、デッドロックが発生します。 この状況を避けるには、invokeMethodの実行前にすべてのEventRequestを無効にするか、invokeMethodをクライアントのイベント・ハンドラ・スレッドから呼び出さないようにしてください。options
引数にINVOKE_SINGLE_THREADED
ビット・フラグを指定することにより、呼出し中に他のスレッドが再開しないようにできます。ただし、前述のようなデッドロックに対する保護や、デッドロックからの回復ができなくなるため、このオプションはよく注意して利用してください。 指定されたスレッドのみが再開されます(前述したすべてのスレッドの場合と同様)。 シングル・スレッド呼出しが完了すると、呼出し元スレッドは再び中断されます。 シングル・スレッド呼出し中に開始されたすべてのスレッドは、呼出し完了時にも中断されません。呼出し中に
VirtualMachine.dispose()
などによってターゲットVMが切断された場合でも、メソッドの呼出しは続行されます。- APIのノート:
- 「仮想スレッド」は、通常、オペレーティング・システムではなくJavaランタイムによってスケジュールされるユーザー・モード・スレッドです。 そのため、
INVOKE_SINGLE_THREADED
オプションによってデッドロックが発生する可能性がある仮想スレッドでは、さらに多くのケースが考えられます。 たとえば、ターゲットVM内のすべてのスレッドを一時停止すると、仮想スレッドのタイマー・メカニズムをサポートするスレッドが一時停止されるため、Thread.sleep(long)
などのメソッドがデッドロックする可能性があります。 - パラメータ:
thread
- 呼出しを行うスレッド。method
- 呼び出すMethod
。arguments
- 呼び出されたメソッドにバインドされたValue
引数のリスト。 リストから取得した値は、メソッド・シグニチャに指定されている順序で引数に代入される。options
- 整数ビット・フラグ・オプション。- 戻り値:
- 呼び出されたメソッドの戻り値の
Value
ミラー。 - 例外:
IllegalArgumentException
- メソッドがこのオブジェクトのクラスのメンバーでない場合、引数リストのサイズがメソッドの宣言された引数の数と一致しない場合、メソッドがコンストラクタまたは静的イニシャライザの場合、またはINVOKE_NONVIRTUAL
が指定され、メソッドが抽象の場合。ClassNotLoadedException
- 引数型が、適切なクラス・ローダーによってロードされていない場合。IncompatibleThreadStateException
- 指定されたスレッドが、イベントによって中断されていない場合。InvocationException
- メソッドの呼出しにより、ターゲットVMで例外が発生した場合。InvalidTypeException
- 引数が次の条件を満たさない場合 -- オブジェクト引数は、この引数型への代入互換性を持たなければなりません。 (これは、囲むクラスのクラス・ローダーによってこの引数型をロードする必要があることを意味する)。 プリミティブ引数は、この引数型への代入互換性を持っているか、情報を失わずにこの引数型に変換できる必要がある。 代入互換性の詳細は、JLSのセクション5.2を参照してください。VMCannotBeModifiedException
- VirtualMachineが読取り専用の場合(VirtualMachine.canBeModified()
を参照)。
-
disableCollection
void disableCollection()このオブジェクトに対するガベージ・コレクションを回避します。 デフォルトでは、JDIにより返されるすべてのObjectReference
値は、ターゲットVMの実行中にいつでもガベージ・コレクトが可能です。 このメソッドを呼び出すと、オブジェクトがガベージ・コレクトされないことが保証されます。ガベージ・コレクトを再度有効にするには、enableCollection()
を使用します。このメソッドの呼出しは、カウントされます。 このメソッドを呼び出すたびに、
enableCollection()
を呼び出して、ガベージ・コレクトを再度有効にする必要があります。ターゲットVMの中断中は、すべてのスレッドが中断しているため、ガベージ・コレクションは行われません。 中断中に変数、フィールド、および配列を調べるという一般的な操作の場合は、明示的にガベージ・コレクションを無効にしなくても安全です。
このメソッドを使用すると、ターゲットVM内のガベージ・コレクションのパターンが変わるため、アプリケーションの動作がデバッガ実行時とデバッガ非実行時とで異なる結果になる可能性があります。そのため、このメソッドの使用には慎重を期してください。
- 例外:
VMCannotBeModifiedException
- VirtualMachineが読取り専用の場合(VirtualMachine.canBeModified()
を参照)。
-
enableCollection
void enableCollection()このオブジェクトのガベージ・コレクションを許可します。 デフォルトでは、JDIにより返されるすべてのObjectReference
値は、ターゲットVMの実行中にいつでもガベージ・コレクトが可能です。 このメソッドの呼出しは、disableCollection()
によってガベージ・コレクトが無効になっている場合にかぎり必要です。- 例外:
VMCannotBeModifiedException
- VirtualMachineが読取り専用の場合(VirtualMachine.canBeModified()
を参照)。
-
isCollected
boolean isCollected()ターゲットVMでこのオブジェクトがガベージ・コレクトされているかどうかを判定します。- 戻り値:
- この
ObjectReference
がガベージ・コレクトされている場合はtrue
、そうでない場合はfalse
。 - 例外:
VMCannotBeModifiedException
- VirtualMachineが読取り専用の場合(VirtualMachine.canBeModified()
を参照)。
-
uniqueID
long uniqueID()このObjectReferenceの一意の識別子を返します。 この識別子によって、同じVMの破棄されていないすべてのObjectReferenceが一意であることが保証されます。 これは、このObjectReferenceが破棄されるまで保証されます。- 戻り値:
- long型の一意のID
-
waitingThreads
List<ThreadReference> waitingThreads() throws IncompatibleThreadStateExceptionこのオブジェクトのモニターを現在待機している各スレッドのThreadReference
を含むリストを返します。 モニターを待機していると見なされるスレッドの状態については、ThreadReference.currentContendedMonitor()
を参照してください。この操作は、ターゲットVMでサポートされていないことがあります。 この操作がサポートされているかどうかを確認するには、VirtualMachine#canGetMonitorInfoを参照してください。
- 戻り値:
ThreadReference
オブジェクトのリスト。 モニターを待機しているスレッドが存在しない場合、リストの長さはゼロになる。- 例外:
UnsupportedOperationException
- ターゲットVMでこの操作がサポートされていない場合。IncompatibleThreadStateException
- ターゲットVMに中断されていない待機中のスレッドがある場合
-
owningThread
ThreadReference owningThread() throws IncompatibleThreadStateExceptionこのオブジェクトのモニターを現在所有するスレッドがある場合は、そのスレッドのThreadReference
を返します。 所有権の定義については、ThreadReference.ownedMonitors()
を参照してください。この操作は、ターゲットVMでサポートされていないことがあります。 この操作がサポートされているかどうかを確認するには、VirtualMachine#canGetMonitorInfoを参照してください。
- 戻り値:
- モニターを現在所有する
ThreadReference
。モニターが所有されていない場合はnull。 - 例外:
UnsupportedOperationException
- ターゲットVMでこの操作がサポートされていない場合。IncompatibleThreadStateException
- 所有するスレッドがターゲットVMで中断されていない場合
-
entryCount
int entryCount() throws IncompatibleThreadStateException現在所有しているスレッドが、このオブジェクトのモニターにエントリした回数を返します。 所有権の定義については、ThreadReference.ownedMonitors()
を参照してください。この操作は、ターゲットVMでサポートされていないことがあります。 この操作がサポートされているかどうかを確認するには、VirtualMachine#canGetMonitorInfoを参照してください。
- 戻り値:
- 整数型のエントリ・カウント。
- 例外:
UnsupportedOperationException
- ターゲットVMでこの操作がサポートされていない場合。IncompatibleThreadStateException
- 所有するスレッドがターゲットVMで中断されていない場合- 関連項目:
-
referringObjects
List<ObjectReference> referringObjects(long maxReferrers) このオブジェクトを直接参照するオブジェクトを返します。 ガベージ・コレクト目的で到達可能なオブジェクトだけが返されます。 オブジェクトは、その他の方法でも参照可能です。たとえばスタック・フレーム内でローカル変数を使用する方法、JNIグローバル参照を使用する方法などがあります。 このメソッドでは、このような、オブジェクトを参照しないオブジェクトは返されません。この操作は、ターゲット仮想マシンでサポートされていないことがあります。 この操作がサポートされているかどうかを確認するには、
VirtualMachine.canGetInstanceInfo()
を使用します。- パラメータ:
maxReferrers
- 返される参照オブジェクトの最大数。 負でない数値。 ゼロの場合、すべての参照オブジェクトが返される。- 戻り値:
ObjectReference
オブジェクトのリスト。 このオブジェクトを参照するオブジェクトが存在しない場合は、長さゼロのリストを返す。- 例外:
UnsupportedOperationException
- ターゲット仮想マシンがこの操作をサポートしていない場合(次を参照)。canGetInstanceInfo()
IllegalArgumentException
- maxReferrersがゼロ未満の場合。- 導入されたバージョン:
- 1.6
- 関連項目:
-
equals
-
hashCode
-