モジュール 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 int INVOKE_NONVIRTUAL
      非仮想メソッドの呼出しを実行します。
      static int INVOKE_SINGLE_THREADED
      呼出し側のスレッドだけを再開してメソッドの呼出しを実行します。
    • メソッドのサマリー

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

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

        パラメータ:
        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で中断されていない場合
        関連項目:
        owningThread()
      • referringObjects

        List<ObjectReference> referringObjects​(long maxReferrers)
        このオブジェクトを直接参照するオブジェクトを返します。 ガベージ・コレクト目的で到達可能なオブジェクトだけが返されます。 オブジェクトは、その他の方法でも参照可能です。たとえばスタック・フレーム内でローカル変数を使用する方法、JNIグローバル参照を使用する方法などがあります。 このメソッドでは、このような、オブジェクトを参照しないオブジェクトは返されません。

        この操作は、ターゲット仮想マシンでサポートされていないことがあります。 この操作がサポートされているかどうかを確認するには、VirtualMachine.canGetInstanceInfo()を使用します。

        パラメータ:
        maxReferrers - 返される参照オブジェクトの最大数。 負でない数値。 ゼロの場合、すべての参照オブジェクトが返される。
        戻り値:
        ObjectReferenceオブジェクトのリスト。 このオブジェクトを参照するオブジェクトが存在しない場合は、長さゼロのリストを返す。
        例外:
        UnsupportedOperationException - ターゲット仮想マシンがこの操作をサポートしていない場合(次を参照)。canGetInstanceInfo()
        IllegalArgumentException - maxReferrersがゼロ未満の場合。
        導入されたバージョン:
        1.6
        関連項目:
        VirtualMachine.instanceCounts(List), ReferenceType.instances(long)
      • equals

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