Spec-Zone.ru › OpenJDK 24

Интерфейс ObjectReference

Все суперинтерфейсы:
Mirror, Value
Все известные подинтерфейсы:
ArrayReference, ClassLoaderReference, ClassObjectReference, ModuleReference, StringReference, ThreadGroupReference, ThreadReference
public interface ObjectReference extends Value
Объект, который в настоящее время существует в целевой виртуальной машине. ObjectReference отражает только сам объект и не относится к какому-либо Field или LocalVariable, к которому он в данный момент назначен. ObjectReference может иметь 0 или более ссылок из поля(ей) и/или переменной(ых).

Любой метод в ObjectReference, который прямо или косвенно принимает ObjectReference в качестве параметра, может выбросить VMDisconnectedException, если целевая виртуальная машина отключена, и событие VMDisconnectEvent уже было или будет доступно для чтения из EventQueue.

Любой метод в ObjectReference, который прямо или косвенно принимает ObjectReference в качестве параметра, может выбросить VMOutOfMemoryException, если целевая виртуальная машина испытывает недостаток памяти.

Любой метод в ObjectReference, или который прямо или косвенно принимает ObjectReference в качестве параметра, может выбросить ObjectCollectedException, если отраженный объект был удалён сборщиком мусора.

С момента:
1.3

Краткое описание полей

Модификатор и тип Поле Описание
static final int INVOKE_NONVIRTUAL
Выполнить вызов невиртуального метода
static final int INVOKE_SINGLE_THREADED
Выполнить вызов метода, приостановив только вызывающую нить

Краткое описание методов

Модификатор и тип Метод Описание
void disableCollection()
Запрещает сбор мусора для этого объекта.
void enableCollection()
Разрешает сбор мусора для этого объекта.
int entryCount()
Возвращает количество раз, когда монитор этого объекта был введён текущей владеющей нитью, если владеющая нить является платформенной нитью; Возвращает 0, если не владеет платформенной нитью.
boolean equals(Object obj)
Сравнивает указанный объект с этим ObjectReference на равенство.
Value getValue(Field sig)
Получает значение заданного экземпляра или статического поля в этом объекте.
Map<Field,Value> getValues(List<? extends Field> fields)
Получает значение нескольких экземпляров и/или статических полей в этом объекте.
int hashCode()
Возвращает значение хэш-кода для этого ObjectReference.
Value invokeMethod(ThreadReference thread, Method method, List<? extends Value> arguments, int options)
Вызывает указанный Method для этого объекта в целевой виртуальной машине.
boolean isCollected()
Определяет, был ли этот объект удалён сборщиком мусора в целевой виртуальной машине.
ThreadReference owningThread()
Возвращает ThreadReference для платформенной нити, если таковая имеется, которая в настоящее время владеет монитором этого объекта.
ReferenceType referenceType()
Получает ReferenceType, который отражает тип этого объекта.
List<ObjectReference> referringObjects(long maxReferrers)
Возвращает объекты, которые напрямую ссылаются на этот объект.
void setValue(Field field, Value value)
Устанавливает значение заданного экземпляра или статического поля в этом объекте.
long uniqueID()
Возвращает уникальный идентификатор для этого ObjectReference.
List<ThreadReference> waitingThreads()
Возвращает список, содержащий 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!");

ReferenceType объекта obj будет отражать java.lang.String, а не java.lang.Object.

Тип объекта никогда не меняется, поэтому этот метод всегда будет возвращать тот же ReferenceType на протяжении всего жизненного цикла отраженного объекта.

Возвращаемый ReferenceType будет ClassType или ArrayType и никогда InterfaceType.

Возвращает:
ReferenceType для этого объекта.

getValue

Value getValue(Field sig)
Получает значение заданного экземпляра или статического поля в этом объекте. Поле должно быть допустимым для этого ObjectReference; то есть оно должно быть из класса отражаемого объекта или его суперкласса.
Параметры:
sig - поле, содержащее запрашиваемое значение
Возвращает:
Value поля экземпляра.
Исключения:
IllegalArgumentException - если поле не является допустимым для класса этого объекта.

getValues

Map<Field,Value> getValues(List<? extends Field> fields)
Получает значения нескольких полей экземпляра и/или статических полей в этом объекте. Поля должны быть допустимыми для этого ObjectReference; то есть они должны быть из класса отражаемого объекта или его суперкласса.
Параметры:
fields - список объектов Field, содержащих запрашиваемые значения.
Возвращает:
Словарь запрашиваемых объектов Field с их Value.
Исключения:
IllegalArgumentException - если какое-либо поле не является допустимым для класса этого объекта.

setValue

void setValue(Field field, Value value) throws InvalidTypeException, ClassNotLoadedException
Устанавливает значение заданного экземпляра или статического поля в этом объекте. Field должно быть допустимым для этого ObjectReference; то есть оно должно быть из класса отражаемого объекта или его суперкласса. Поле не должно быть final.

Значения объектов должны быть совместимы с типом поля (Это подразумевает, что тип поля должен быть загружен через загрузчик классов содержащего класса). Примитивные значения должны быть либо совместимы с типом поля, либо могут быть преобразованы в тип поля без потери информации. См. раздел 5.2 спецификации языка Java для получения дополнительной информации о совместимости присваивания.

Параметры:
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
Вызывает указанный Method для этого объекта в целевой виртуальной машине. Указанный метод может быть определён в классе этого объекта, в суперклассе класса этого объекта или в интерфейсе, реализованном этим объектом. Метод может быть статическим или экземпляром, но не статическим инициализатором или конструктором. Используйте ClassType.newInstance(com.sun.jdi.ThreadReference, com.sun.jdi.Method, java.util.List<? extends com.sun.jdi.Value>, int) для создания нового объекта и запуска его конструктора.

Вызов метода произойдёт в указанной нити. Вызов метода возможен только если указанная нить была приостановлена событием, произошедшим в этой нити. Вызов метода не поддерживается, когда целевая виртуальная машина приостановлена через VirtualMachine.suspend() или когда указанная нить приостановлена через ThreadReference.suspend().

Указанный метод вызывается с аргументами из указанного списка аргументов. Вызов метода является синхронным; этот метод не возвращает значения, пока вызванный метод не вернёт значение в целевой виртуальной машине. Если вызванный метод выбрасывает исключение, этот метод сгенерирует InvocationException, содержащий зеркало объекта исключения, сгенерированного в результате выполнения.

Аргументы-объекты должны быть совместимы с типом аргумента по присваиванию (Это означает, что тип аргумента должен быть загружен через загрузчик классов содержащего класса). Примитивные аргументы должны быть либо совместимы с типом аргумента по присваиванию, либо должны быть преобразуемы в тип аргумента без потери информации. Если вызываемый метод принимает переменное количество аргументов, то последний тип аргумента – массив какого-либо компонентного типа. Аргумент в соответствующей позиции может быть опущен или равен null, быть массивом того же компонентного типа, или быть аргументом компонентного типа, за которым следует любое количество других аргументов того же типа. Если аргумент опущен, то передаётся массив длины 0 заданного компонентного типа. Компонентный тип может быть примитивным типом. Автоупаковки не поддерживаются. См. раздел 5.2 спецификации языка Java для получения более подробной информации о совместимости по присваиванию.

По умолчанию метод вызывается с использованием динамического поиска, как описано в разделе 15.12.4.4 спецификации языка Java, в частности, происходит переопределение на основе фактического типа объекта, отражённого этим ObjectReference. Это поведение может быть изменено путём указания флага INVOKE_NONVIRTUAL в options аргументе. Если этот флаг установлен, указанный метод вызывается, независимо от того, переопределён ли он для фактического типа объекта. В этом случае метод должен иметь реализацию, либо в классе, либо в интерфейсе. Этот параметр полезен для выполнения вызовов методов, аналогичных тем, которые выполняются с ключевым словом super в языке программирования Java.

По умолчанию, все нити в целевой виртуальной машине возобновляются во время вызова метода, если они ранее были приостановлены событием или через VirtualMachine.suspend() или ThreadReference.suspend(). Это делается для предотвращения тупиков, которые могут возникнуть, если какая-либо из нитей владеет ресурсами, такими как мониторы, которые потребуются вызываемому методу. Однако обратите внимание, что это неявное возобновление действует точно так же, как ThreadReference.resume(), поэтому, если счётчик приостановки нити больше 1, она останется в приостановленном состоянии во время вызова, и, следовательно, тупик всё ещё может возникнуть. По умолчанию, когда вызов завершается, все нити в целевой виртуальной машине приостанавливаются, независимо от их состояния до вызова. Во время вызова могут происходить точки останова или другие события. Это может привести к тупику, как описано выше. Также может произойти тупик, если invokeMethod вызывается из обработчика событий клиента. В этом случае эта нить будет ожидать завершения invokeMethod и не будет читать EventSet, который поступает для нового события. Если этот новый EventSet – SUSPEND_ALL, то произойдёт тупик, потому что никто не возобновит EventSet. Чтобы этого избежать, все EventRequests должны быть отключены перед вызовом invokeMethod, или invokeMethod не должен вызываться из нити обработчика событий клиента.

Возобновление других нитей во время вызова можно предотвратить, указав флаг INVOKE_SINGLE_THREADED в options аргументе; однако, нет защиты от тупиков, описанных выше, или механизма восстановления, поэтому этот параметр следует использовать с большой осторожностью. Возобновляется только указанная нить (как описано для всех нитей выше). По завершении однонитевого вызова вызывающая нить будет снова приостановлена. Обратите внимание, что любые нити, запущенные во время однонитевого вызова, не будут приостановлены при завершении вызова.

Если целевая виртуальная машина отсоединяется во время вызова (например, через VirtualMachine.dispose()), вызов метода продолжается.

API Note:
Виртуальные нити обычно являются нитями пользовательского режима, которые планируются Java-средой выполнения, а не операционной системой. Таким образом, могут быть случаи с виртуальными нитями, когда параметр INVOKE_SINGLE_THREADED может привести к тупику. Например, приостановление всех нитей в целевой виртуальной машине может приостановить нити, поддерживающие механизм таймеров для виртуальных нитей, и поэтому методы, такие как Thread.sleep(long), могут привести к тупику.
Parameters:
thread - нить для вызова.
method - Method для вызова.
arguments - список Value аргументов, привязанных к вызываемому методу. Значения из списка присваиваются аргументам в порядке их появления в сигнатуре метода.
options - целочисленный флаг параметров.
Returns:
зеркало Value возвращаемого значения вызванного метода.
Throws:
IllegalArgumentException - если метод не является членом класса этого объекта, если размер списка аргументов не соответствует числу объявленных аргументов для метода, если метод является конструктором или статическим инициализатором, или если INVOKE_NONVIRTUAL указан, и метод абстрактный.
ClassNotLoadedException - если какой-либо тип аргумента ещё не загружен через соответствующий загрузчик классов.
IncompatibleThreadStateException - если указанная нить не была приостановлена событием.
InvocationException - если вызов метода привёл к исключению в целевой виртуальной машине.
InvalidTypeException - Если аргументы не соответствуют этому требованию — аргументы-объекты должны быть совместимы с типом аргумента по присваиванию. Это означает, что тип аргумента должен быть загружен через загрузчик классов содержащего класса. Примитивные аргументы должны быть либо совместимы с типом аргумента по присваиванию, либо должны быть преобразуемы в тип аргумента без потери информации. См. раздел 5.2 JLS для получения более подробной информации о совместимости по присваиванию.
VMCannotBeModifiedException - если виртуальная машина является только для чтения — см. VirtualMachine.canBeModified().

disableCollection

void disableCollection()
Препятствует сборке мусора для этого объекта. По умолчанию все ObjectReference значения, возвращаемые JDI, могут быть собраны в любое время при работе целевой виртуальной машины. Вызов этого метода гарантирует, что объект не будет собран. enableCollection() может быть использован, чтобы разрешить сборку ещё раз.

Количество вызовов этого метода подсчитывается. Каждый вызов этого метода требует соответствующего вызова enableCollection() до того, как сборка мусора будет снова включена.

Обратите внимание, что во время приостановки целевой виртуальной машины сборка мусора не будет происходить, потому что все нити приостановлены. Типичное исследование переменных, полей и массивов во время приостановки безопасно без явного отключения сборки мусора.

Этот метод следует использовать с осторожностью, поскольку он изменяет поведение сборки мусора в целевой виртуальной машине и, как следствие, может привести к поведению приложения под отладчиком, отличающемуся от его поведения без отладчика.

Throws:
VMCannotBeModifiedException - если виртуальная машина является только для чтения — см. VirtualMachine.canBeModified().

enableCollection

void enableCollection()
Разрешает сборку мусора для этого объекта. По умолчанию все ObjectReference значения, возвращаемые JDI, могут быть собраны в любое время при работе целевой виртуальной машины. Вызов этого метода необходим только в том случае, если сборка мусора была ранее отключена с помощью disableCollection().
Throws:
VMCannotBeModifiedException - если виртуальная машина является только для чтения — см. VirtualMachine.canBeModified().

isCollected

boolean isCollected()
Определяет, был ли этот объект собран мусором в целевой виртуальной машине.
Returns:
true если этот ObjectReference был собран; false в противном случае.
Throws:
VMCannotBeModifiedException - если виртуальная машина является только для чтения — см. VirtualMachine.canBeModified().

uniqueID

long uniqueID()
Возвращает уникальный идентификатор для этого ObjectReference. Гарантируется, что он уникален для всех ObjectReference из той же виртуальной машины, которые ещё не были удалены. Гарантия действует до тех пор, пока этот ObjectReference не будет удалён.
Returns:
уникальный идентификатор типа long

waitingThreads

List<ThreadReference> waitingThreads() throws IncompatibleThreadStateException
Возвращает список, содержащий ThreadReference для каждого потока платформы, в настоящее время ожидающего монитор этого объекта. См. ThreadReference.currentContendedMonitor() для информации о том, когда поток считается ожидающим монитора.

Не все целевые среды исполнения поддерживают эту операцию. См. VirtualMachine.canGetMonitorInfo() для определения поддержки операции.

Возвращает:
список объектов ThreadReference. Список имеет нулевую длину, если ни один поток не ожидает монитора, или только виртуальные потоки ожидают монитора.
Исключения:
UnsupportedOperationException - если целевая среда исполнения не поддерживает эту операцию.
IncompatibleThreadStateException - если какой-либо ожидающий поток не приостановлен в целевой среде исполнения

owningThread

ThreadReference owningThread() throws IncompatibleThreadStateException
Возвращает ThreadReference для потока платформы, если таковой имеется, который в настоящее время владеет монитором этого объекта. См. ThreadReference.ownedMonitors() для определения владения.

Не все целевые среды исполнения поддерживают эту операцию. См. VirtualMachine.canGetMonitorInfo() для определения поддержки операции.

Возвращает:
ThreadReference потока платформы, который в настоящее время владеет монитором, или null, если монитор владеть виртуальным потоком или не владеет.
Исключения:
UnsupportedOperationException - если целевая среда исполнения не поддерживает эту операцию.
IncompatibleThreadStateException - если владеющий поток не приостановлен в целевой среде исполнения

entryCount

int entryCount() throws IncompatibleThreadStateException
Возвращает количество раз, когда монитор этого объекта был введён текущим владеющим потоком, если владеющий поток — поток платформы; возвращает 0, если не владеет платформенный поток. См. ThreadReference.ownedMonitors() для определения владения.

Не все целевые среды исполнения поддерживают эту операцию. См. VirtualMachine.canGetMonitorInfo() для определения поддержки операции.

Возвращает:
целое число — количество входов.
Исключения:
UnsupportedOperationException - если целевая среда исполнения не поддерживает эту операцию.
IncompatibleThreadStateException - если владеющий поток не приостановлен в целевой среде исполнения
См. также:
  • owningThread()

referringObjects

List<ObjectReference> referringObjects(long maxReferrers)
Возвращает объекты, которые непосредственно ссылаются на этот объект. Возвращаются только объекты, доступные для целей сбора мусора. Обратите внимание, что на объект также можно ссылаться другими способами, например, из локальной переменной в стековом кадре или из глобальной ссылки JNI. Такие не являющиеся объектами ссылки не возвращаются этим методом.

Не все целевые виртуальные машины поддерживают эту операцию. Используйте VirtualMachine.canGetInstanceInfo() для определения поддержки операции.

Параметры:
maxReferrers - Максимальное количество возвращаемых ссылающихся объектов. Должно быть неотрицательным. Если ноль, возвращаются все ссылающиеся объекты.
Возвращает:
список объектов ObjectReference. Если нет объектов, которые ссылаются на этот объект, возвращается список нулевой длины.
Исключения:
UnsupportedOperationException - если целевая виртуальная машина не поддерживает эту операцию - см. VirtualMachine.canGetInstanceInfo()
IllegalArgumentException - если maxReferrers меньше нуля.
С момента:
1.6
См. также:
  • VirtualMachine.instanceCounts(List)
  • ReferenceType.instances(long)

equals

boolean equals(Object obj)
Сравнивает указанный объект с этим ObjectReference на равенство.
Переопределяет:
equals в классе Object
Параметры:
obj - объект ссылки для сравнения.
Возвращает:
true, если объект является ObjectReference, если ObjectReference принадлежат одной и той же ВМ и если применение оператора "==" к отражённым объектам в этой ВМ даёт true.
См. также:
  • Object.hashCode()
  • HashMap

hashCode

int hashCode()
Возвращает значение хэш-кода для этого ObjectReference.
Переопределяет:
hashCode в классе Object
Возвращает:
целое число хэш-код
См. также:
  • Object.equals(java.lang.Object)
  • System.identityHashCode(java.lang.Object)

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://download.java.net/java/early_access/jdk24/docs/api/jdk.jdi/com/sun/jdi/ObjectReference.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API