Spec-Zone.ru › OpenJDK 21

Интерфейс 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()
Возвращает количество раз, когда монитор этого объекта был захвачен текущим владеющим потоком.
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.

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

getValue

Value getValue(Field sig)
Получает значение заданного экземпляра или статического поля в этом объекте. Поле должно быть валидным для этого ObjectReference; то есть, оно должно принадлежать классу отзеркаленного объекта или его суперклассу.
Параметры:
sig - поле, содержащее запрашиваемое значение
Возвращает:
the 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, массивом того же базового типа, или аргументом базового типа, за которым следует любое количество других аргументов того же типа. Если аргумент опущен, то передаётся массив нулевой длины базового типа. Базовый тип может быть примитивным типом. Автоупаковка не поддерживается. См. раздел 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. Чтобы этого избежать, все EventRequest должны быть отключены до выполнения invokeMethod или invokeMethod не должен выполняться из обработчика событий клиента.

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

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

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

disableCollection

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

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

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

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

Throws:
VMCannotBeModifiedException - если VirtualMachine только для чтения - см. VirtualMachine.canBeModified().

enableCollection

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

isCollected

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

uniqueID

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

waitingThreads

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

Не все целевые виртуальные машины поддерживают эту операцию. См. VirtualMachine#canGetMonitorInfo, чтобы определить, поддерживается ли операция.

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

owningThread

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

Не все целевые виртуальные машины поддерживают эту операцию. См. VirtualMachine#canGetMonitorInfo, чтобы определить, поддерживается ли операция.

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

entryCount

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

Не все целевые виртуальные машины поддерживают эту операцию. См. VirtualMachine#canGetMonitorInfo, чтобы определить, поддерживается ли операция.

Возвращает:
целое число, равное количеству входов.
Имеет дело с:
UnsupportedOperationException - если целевая виртуальная машина не поддерживает эту операцию.
IncompatibleThreadStateException - если владеющий поток не приостановлен в целевой виртуальной машине
См. также:
  • 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)
Сравнивает указанный объект с этой ObjectReference на равенство.
Переопределяет:
equals в классе Object
Параметры:
obj - объект-ссылка для сравнения.
Возвращает:
true, если объект является ObjectReference, если ObjectReferences принадлежат одной и той же виртуальной машине и если применение оператора "==" к отражённым объектам в этой виртуальной машине даёт true.
См. также:
  • Object.hashCode()
  • HashMap

hashCode

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

© 1993, 2023, 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://docs.oracle.com/en/java/javase/21/docs/api/jdk.jdi/com/sun/jdi/ObjectReference.html

Spec-Zone.ru

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