モジュール jdk.jdi
パッケージ com.sun.jdi

インタフェースObjectReference

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

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

ObjectReferenceを直接的または間接的にパラメータとするObjectReferenceのメソッドは、ターゲットVMが切断され、VMDisconnectEventEventQueueから読み取られているか、または読み取られている場合はVMDisconnectedExceptionをスローする可能性があります。

直接または間接にObjectReferenceをパラメータとするObjectReferenceのメソッドは、ターゲットVMのメモリーが不足している場合はVMOutOfMemoryExceptionをスローする可能性があります。

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

導入されたバージョン:
1.3
  • フィールドのサマリー

    フィールド
    修飾子と型
    フィールド
    説明
    static final int
    非仮想メソッドの呼出しを実行します。
    static final int
    呼出し側のスレッドだけを再開してメソッドの呼出しを実行します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    void
    このオブジェクトに対するガベージ・コレクションを回避します。
    void
    このオブジェクトのガベージ・コレクションを許可します。
    int
    現在所有しているスレッドが、このオブジェクトのモニターにエントリした回数を返します。
    boolean
    指定されたObjectがこのObjectReferenceと等しいかどうか比較します。
    このオブジェクトの指定されたインスタンスまたはstaticフィールドの値を取得します。
    getValues(List<? extends Field> fields)
    このオブジェクトの複数のインスタンスまたはstaticフィールド、あるいはその両方の値を取得します。
    int
    このObjectReferenceのハッシュ・コード値を返します。
    invokeMethod(ThreadReference thread, Method method, List<? extends Value> arguments, int options)
    ターゲットVM内のこのオブジェクトで指定されたMethodを呼び出します。
    boolean
    ターゲットVMでこのオブジェクトがガベージ・コレクトされているかどうかを判定します。
    このオブジェクトのモニターを現在所有するスレッドがある場合は、そのスレッドのThreadReferenceを返します。
    このオブジェクトの型をミラー化するReferenceTypeを取得します。
    referringObjects(long maxReferrers)
    このオブジェクトを直接参照するオブジェクトを返します。
    void
    setValue(Field field, Value value)
    このオブジェクトのインスタンス・フィールドまたはstaticフィールドの値を設定します。
    long
    このObjectReferenceの一意の識別子を返します。
    このオブジェクトのモニターを現在待機している各スレッドのThreadReferenceを含むリストを返します。

    インタフェース com.sun.jdi.Mirrorで宣言されたメソッド

    toString, virtualMachine

    インタフェース com.sun.jdi.Valueで宣言されたメソッド

    type
  • フィールド詳細

    • 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

      Value getValue(Field sig)
      このオブジェクトの指定されたインスタンスまたはstaticフィールドの値を取得します。 Fieldは、このObjectReferenceに対して有効である必要があります。つまり、Fieldは、ミラー化されたオブジェクトのクラスのフィールド、またはそのクラスのスーパー・クラスのフィールドである必要があります。
      パラメータ:
      sig - 要求された値を含むフィールド
      戻り値:
      インスタンス・フィールドのValue
      例外:
      IllegalArgumentException - フィールドがこのオブジェクトのクラスにとって有効でない場合。
    • getValues

      Map<Field,Value> getValues(List<? extends Field> fields)
      このオブジェクトの複数のインスタンスまたはstaticフィールド、あるいはその両方の値を取得します。 Fieldは、このObjectReferenceに対して有効である必要があります。つまり、Fieldは、ミラー化されたオブジェクトのクラスのフィールド、またはそのクラスのスーパー・クラスのフィールドである必要があります。
      パラメータ:
      fields - 要求された値を含むFieldオブジェクトのリスト。
      戻り値:
      Valueを含む、要求されたFieldオブジェクトのマップ。
      例外:
      IllegalArgumentException - このオブジェクトのクラスにとって無効なフィールドがある場合。
    • setValue

      void setValue(Field field, Value value) throws InvalidTypeException, ClassNotLoadedException
      このオブジェクトのインスタンス・フィールドまたはstaticフィールドの値を設定します。 Fieldは、このObjectReferenceに対して有効である必要があります。つまり、Fieldは、ミラー化されたオブジェクトのクラスのフィールド、またはそのクラスのスーパー・クラスのフィールドである必要があります。 staticの場合は、フィールドはfinalではあってはいけません。

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

      パラメータ:
      field - 要求された値を含むフィールド
      value - 代入する新しい値
      例外:
      IllegalArgumentException - フィールドがこのオブジェクトのクラスにとって有効でない場合。
      InvalidTypeException - 値の型がフィールドの型に一致しない場合。
      ClassNotLoadedException - valueがnullでなく、適切なクラス・ローダーによるフィールドの型のロードがまだ行われていない場合。
      VMCannotBeModifiedException - VirtualMachineが読取り専用の場合(VirtualMachine.canBeModified()を参照)。
    • invokeMethod

      ターゲット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が切断された場合でも、メソッドの呼出しは続行されます。

      パラメータ:
      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

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

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

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

      このオブジェクトのモニターを現在所有するスレッドがある場合は、そのスレッドの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

      boolean equals(Object obj)
      指定されたObjectがこのObjectReferenceと等しいかどうか比較します。
      オーバーライド:
      equals 、クラス:  Object
      パラメータ:
      obj - 比較対象の参照オブジェクト。
      戻り値:
      ObjectがObjectReferenceである場合、両方のObjectReferenceが同じVMに属している場合、およびそのVMでミラー化されたオブジェクトに対して「==」演算子を適用したときの評価がtrueの場合はtrue。
      関連項目:
    • hashCode

      int hashCode()
      このObjectReferenceのハッシュ・コード値を返します。
      オーバーライド:
      hashCode 、クラス:  Object
      戻り値:
      整数のハッシュ・コード
      関連項目: