Spec-Zone.ru › OpenJDK 17

Интерфейс 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, содержащих запрашиваемые значения.
Возвращает:
a Map запрошенных объектов Field со своими Value.
Исключения:
IllegalArgumentException - если какое-либо поле не валидно для класса этого объекта.

setValue

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

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

Параметры:
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
Вызывает указанный 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. Чтобы избежать этого, все EventRequests должны быть отключены до вызова 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. Гарантируется, что он уникален среди всех ObjectReferences от той же виртуальной машины, которые ещё не были удалены. Гарантия действует до тех пор, пока этот ObjectReference не был удалён.
Returns:
длинное уникальное ID

Ожидающие потоки

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

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

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

Владеющий поток

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

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

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

Количество входов

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

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

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

Ссылки на объекты

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, 2021, 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/17/docs/api/jdk.jdi/com/sun/jdi/ObjectReference.html

Spec-Zone.ru

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