public interface ObjectReference extends Value
Field
или LocalVariable
которому это в настоящий момент присваивается. У ObjectReference может быть 0 или больше ссылок от поля (ей) и/или переменной (ых). Любой метод на ObjectReference
который прямо или косвенно берет ObjectReference
поскольку параметр может бросить VMDisconnectedException
если целевой VM разъединяется и VMDisconnectEvent
был или доступен, чтобы быть считанным из EventQueue
.
Любой метод на ObjectReference
который прямо или косвенно берет ObjectReference
поскольку параметр может бросить VMOutOfMemoryException
если целевой VM исчерпал память.
Любой метод на ObjectReference
или который прямо или косвенно берет ObjectReference
поскольку параметр может бросить ObjectCollectedException
если зеркально отраженный объект был собран "мусор".
Модификатор и Тип | Поле и Описание |
---|---|
static int |
INVOKE_NONVIRTUAL
Выполните невиртуальный вызов метода
|
static int |
INVOKE_SINGLE_THREADED
Выполните вызов метода с только возобновленным потоком вызова
|
Модификатор и Тип | Метод и Описание |
---|---|
void |
disableCollection()
Предотвращает сборку "мусора" для этого объекта.
|
void |
enableCollection()
Сборка "мусора" разрешений для этого объекта.
|
int |
entryCount()
Возвращает времена числа, монитор этого объекта был введен текущим потоком обладания.
|
boolean |
equals(Object obj)
Сравнивает указанный Объект с этим ObjectReference для равенства.
|
Значение |
getValue(Field sig)
Получает значение приведенного примера или статического поля в этом объекте.
|
Map<Field,Value> |
getValues(List<? extends Field> fields)
Получает значение многократного экземпляра и/или статических полей в этом объекте.
|
int |
hashCode()
Возвращает значение хэш-кода для этого ObjectReference.
|
Значение |
invokeMethod(ThreadReference thread, Method method, List<? extends Value> arguments, int options)
Вызывает указанное
Method на этом объекте в целевом VM. |
boolean |
isCollected()
Определяет, был ли этот объект собран "мусор" в целевом VM.
|
ThreadReference |
owningThread()
Возвраты
ThreadReference для потока, если таковые вообще имеются, которому в настоящий момент принадлежит монитор этого объекта. |
ReferenceType |
referenceType()
Добирается
ReferenceType это зеркально отражает тип этого объекта. |
List<ObjectReference> |
referringObjects(long maxReferrers)
Возвраты возражают что непосредственно ссылка этот объект.
|
void |
setValue(Field field, Value value)
Устанавливает значение приведенного примера или статического поля в этом объекте.
|
long |
uniqueID()
Возвращает уникальный идентификатор для этого ObjectReference.
|
List<ThreadReference> |
waitingThreads()
Возвращает Список, содержащий a
ThreadReference для каждого потока, в настоящий момент ожидая монитора этого объекта. |
toString, virtualMachine
static final int INVOKE_SINGLE_THREADED
static final int INVOKE_NONVIRTUAL
ReferenceType referenceType()
ReferenceType
это зеркально отражает тип этого объекта. Тип может быть подклассом или конструктором объявленного типа любого поля или переменной, которая в настоящий момент содержит это. Например, прямо после следующего оператора.
Object obj = new String("Hello, world!");
ReferenceType obj зеркально отразит java.lang. Строка и не java.lang. Объект.
Тип объекта никогда не изменяется, таким образом, этот метод будет всегда возвращать тот же самый ReferenceType во время жизни зеркально отраженного объекта.
Возвращенный ReferenceType будет a ClassType
или ArrayType
и никогда InterfaceType
.
ReferenceType
для этого объекта.Value getValue(Field sig)
sig
- поле, содержащее требуемое значениеValue
из поля экземпляра.IllegalArgumentException
- если поле не допустимо для class этого объекта.Map<Field,Value> getValues(List<? extends Field> fields)
fields
- список Field
объекты, содержащие требуемые значения.Field
объекты с их Value
.IllegalArgumentException
- если какое-либо поле не допустимо для class этого объекта.void setValue(Field field, Value value) throws InvalidTypeException, ClassNotLoadedException
Field
должно быть допустимым для этого ObjectReference; то есть, это должно быть от class зеркально отраженного объекта или суперкласса того class. Если статический, поле не должно быть заключительным. Объектные значения должны быть присвоением, совместимым с типом поля (Это подразумевает, что тип поля должен быть загружен через class включения загрузчик class). Примитивные значения должны быть или присвоением, совместимым с типом поля, или должны быть конвертируемыми к типу поля без потери информации. См. раздел 5.2 из Спецификации языка Java™ для получения дополнительной информации о совместимости присвоения.
field
- поле, содержащее требуемое значениеvalue
- новое значение, чтобы присвоитьсяIllegalArgumentException
- если поле не допустимо для class этого объекта.InvalidTypeException
- если тип значения не соответствует тип поля.ClassNotLoadedException
- если 'значение' не является нулем, и тип поля еще не был загружен через соответствующий загрузчик class.VMCannotBeModifiedException
- если VirtualMachine только для чтения - см. VirtualMachine.canBeModified()
.Value invokeMethod(ThreadReference thread, Method method, List<? extends Value> arguments, int options) throws InvalidTypeException, ClassNotLoadedException, IncompatibleThreadStateException, InvocationException
Method
на этом объекте в целевом VM. Указанный метод может быть определен в class этого объекта в суперклассе class этого объекта, или в интерфейсе, реализованном этим объектом. Метод может быть статическим методом или методом экземпляра, но не статическим инициализатором или конструктором. Использовать 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
который содержит зеркало к брошенному объекту исключения.
Объектными параметрами должно быть присвоение, совместимое с типом параметра (Это подразумевает, что тип параметра должен быть загружен через class включения загрузчик class). Примитивные параметры должны быть или присвоением, совместимым с типом параметра, или должны быть конвертируемыми к типу параметра без потери информации. Если вызываемый метод принимает переменное число параметров, то последний тип параметра является массивом некоторого компонентного типа. Параметр в соответствующей позиции может быть опущен, или может быть нулем, массивом того же самого компонентного типа, или параметром компонентного типа, сопровождаемого любым числом других параметров того же самого типа. Если параметр опускается, то 0 массивов длины компонентного типа передают. Компонентный тип может быть типом примитива. Автоупаковка не поддерживается. См. раздел 5.2 из Спецификации языка Java™ для получения дополнительной информации о совместимости присвоения.
По умолчанию метод вызывается, используя динамический поиск как задокументировано в разделе 15.12.4.4 из Спецификации языка Java™ в частности переопределяя основанный на типе времени выполнения объекта, зеркально отраженного этим ObjectReference
произойдет. Это поведение может быть изменено, определяя INVOKE_NONVIRTUAL
битовый флаг в options
параметр. Если этот флаг устанавливается, указанный метод вызывается, переопределяется ли это для типа времени выполнения этого объекта. Метод, в этом случае, не должен принадлежать интерфейсу и не должен быть абстрактным. Эта опция полезна для выполнения вызовов метода как те, с которыми покончили super
ключевое слово в языке программирования Java.
По умолчанию все потоки в целевом VM возобновляются, в то время как метод вызывается, если они были ранее приостановлены событием или VirtualMachine.suspend()
или ThreadReference.suspend()
. Это делается, чтобы предотвратить мертвые блокировки, которые произойдут, если какому-либо из потоков будут принадлежать мониторы, которые будут необходимы вызванному методу. Отметьте, однако, что это неявное резюме действует точно как ThreadReference.resume()
, так, если поток приостанавливает количество, больше чем 1, это останется в состоянии ожидания во время вызова, и таким образом мертвая блокировка могла все еще произойти. По умолчанию, когда вызов завершается, все потоки в целевом VM приостанавливаются, независимо их состояние перед вызовом. Возможно, что контрольные точки или другие события могли бы произойти во время вызова. Это может вызвать мертвые блокировки как описано выше. Это может также вызвать мертвую блокировку, если invokeMethod вызывают от потока обработчика событий клиента. В этом случае этот поток будет ожидать invokeMethod, чтобы завершиться и не будет читать EventSet, который входит для нового события. Если этот новый EventSet будет SUSPEND_ALL, то мертвая блокировка произойдет, потому что никто не возобновит EventSet. Чтобы избежать этого, весь EventRequests должен быть отключен прежде, чем сделать invokeMethod, или invokeMethod не должен быть сделан от потока обработчика событий клиента.
Возобновление других потоков во время вызова может быть предотвращено, определяя INVOKE_SINGLE_THREADED
битовый флаг в options
параметр; однако, нет никакой защиты от или восстановления после мертвых блокировок, описанных выше, таким образом, эта опция должна использоваться с большим предостережением. Только указанный поток будет возобновлен (как описано для всех потоков выше). После завершения поточного сингла вызывают, поток вызова будет приостановлен еще раз. Отметьте, что любые потоки, запущенные во время единственного поточного вызова, не будут приостановлены, когда вызов завершится.
Если целевой VM разъединяется во время вызывания (например, через VirtualMachine.dispose()
) вызов метода продолжается.
thread
- поток, в котором можно вызвать.method
- Method
вызвать.arguments
- список Value
параметры, связанные с вызванным методом. Значения от списка присваиваются параметрам в порядке, они появляются в сигнатуре метода.options
- целочисленные опции битового флага.Value
зеркало возвращаемого значения вызванного метода.IllegalArgumentException
- если метод не является элементом class этого объекта, если размер списка параметров не соответствует число объявленного arguemnts для метода, если метод является конструктором или статическим intializer, или если INVOKE_NONVIRTUAL
определяется и метод является или кратким обзором или элементом интерфейса.{@link
- InvalidTypeException}, если какой-либо параметр в списке параметров не присваиваем соответствующему типу параметра метода.ClassNotLoadedException
- если какой-либо тип параметра еще не был загружен через соответствующий загрузчик class.IncompatibleThreadStateException
- если указанный поток не был приостановлен событием.InvocationException
- если вызов метода привел к исключению в целевом VM.InvalidTypeException
- Если параметры не удовлетворяют это требование - Объектными параметрами должно быть присвоение, совместимое с типом параметра. Это подразумевает, что тип параметра должен быть загружен через class включения загрузчик class. Примитивные параметры должны быть или присвоением, совместимым с типом параметра, или должны быть конвертируемыми к типу параметра без потери информации. См. раздел JLS 5.2 для получения дополнительной информации о совместимости присвоения.VMCannotBeModifiedException
- если VirtualMachine только для чтения - см. VirtualMachine.canBeModified()
.void disableCollection()
ObjectReference
значения, возвращенные JDI, могут быть собраны в любое время, целевой VM работает. Звонок в этот метод гарантирует, что объект не будет собран. enableCollection()
может использоваться, чтобы позволить набор еще раз. Звонки в этот метод считаются. Каждый звонок в этот метод требует соответствующего звонка enableCollection()
прежде, чем сборка "мусора" повторно включается.
Отметьте, что, в то время как целевой VM приостанавливается, никакая сборка "мусора" не произойдет, потому что все потоки приостанавливаются. Типичное исследование переменных, полей, и массивов во время приостановки безопасно, явно не отключая сборку "мусора".
Этот метод должен использоваться экономно, поскольку он изменяет образец сборки "мусора" в целевом VM и, следовательно, может привести к поведению приложения под отладчиком, который отличается от его неотлаженного поведения.
VMCannotBeModifiedException
- если VirtualMachine только для чтения - см. VirtualMachine.canBeModified()
.void enableCollection()
ObjectReference
значения, возвращенные JDI, могут быть собраны в любое время, целевой VM работает. Звонок в этот метод необходим, только если сборка "мусора" была ранее отключена с disableCollection()
.VMCannotBeModifiedException
- если VirtualMachine только для чтения - см. VirtualMachine.canBeModified()
.boolean isCollected()
true
если это ObjectReference
был собран; false
иначе.VMCannotBeModifiedException
- если VirtualMachine только для чтения - см. VirtualMachine.canBeModified()
.long uniqueID()
List<ThreadReference> waitingThreads() throws IncompatibleThreadStateException
ThreadReference
для каждого потока, в настоящий момент ожидая монитора этого объекта. См. ThreadReference.currentContendedMonitor()
для информации о том, когда поток, как полагают, ожидает монитора. Не все целевые VMs поддерживают эту работу. См. VirtualMachine#canGetMonitorInfo, чтобы определить, поддерживается ли работа.
ThreadReference
объекты. У списка есть нулевая длина, если никакие потоки не ожидают монитора.UnsupportedOperationException
- если целевой VM не поддерживает эту работу.IncompatibleThreadStateException
- если какой-либо поток ожидания не приостанавливается в целевом VMThreadReference owningThread() throws IncompatibleThreadStateException
ThreadReference
для потока, если таковые вообще имеются, которому в настоящий момент принадлежит монитор этого объекта. См. ThreadReference.ownedMonitors()
для определения владения. Не все целевые VMs поддерживают эту работу. См. VirtualMachine#canGetMonitorInfo, чтобы определить, поддерживается ли работа.
ThreadReference
которому в настоящий момент принадлежит монитор, или нуль, если это является ненаходящимся в собственности.UnsupportedOperationException
- если целевой VM не поддерживает эту работу.IncompatibleThreadStateException
- если поток обладания не приостанавливается в целевом VMint entryCount() throws IncompatibleThreadStateException
ThreadReference.ownedMonitors()
для определения владения. Не все целевые VMs поддерживают эту работу. См. VirtualMachine#canGetMonitorInfo, чтобы определить, поддерживается ли работа.
UnsupportedOperationException
- если целевой VM не поддерживает эту работу.IncompatibleThreadStateException
- если поток обладания не приостанавливается в целевом VMowningThread()
List<ObjectReference> referringObjects(long maxReferrers)
Не все целевые виртуальные машины поддерживают эту работу. Использовать VirtualMachine.canGetInstanceInfo()
определить, поддерживается ли работа.
maxReferrers
- Максимальное количество обращения объектов возвратиться. Должно быть неотрицательным. Если нуль, все объекты обращения возвращаются.ObjectReference
объекты. Если нет никаких объектов, которые ссылаются на этот объект, список нулевой длиной возвращается..UnsupportedOperationException
- если целевая виртуальная машина не поддерживает эту работу - см. canGetInstanceInfo()
IllegalArgumentException
- если maxReferrers является меньше чем нуль.VirtualMachine.instanceCounts(List)
, ReferenceType.instances(long)
boolean equals(Object obj)
equals
в class Object
obj
- ссылочный объект, с которым можно сравниться.Object.hashCode()
, HashMap
int hashCode()
hashCode
в class Object
Object.equals(java.lang.Object)
, System.identityHashCode(java.lang.Object)
Авторское право © 1999, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92