Spec-Zone .ru
спецификации, руководства, описания, API
Содержание | Предыдущий | Следующий | ИндексСпецификация Виртуальной машины JavaTM


instanceof_quick

Работа

instanceof_quick
indexbyte1
indexbyte2
Определите, имеет ли объект данный тип

Формы
instanceof_quick = 225 (0xe1)

Стек
..., objectref..., результат

Описание
objectref, который должен иметь тип reference, выталкивается от стека операнда. indexbyte1 без знака и indexbyte2 используются, чтобы создать индекс в постоянный пул текущего класса (§3.6), где значение индекса (indexbyte1 << 8) | indexbyte2. Класс по тому индексу постоянного пула, должно быть, был уже успешно разрешен и может быть классом, массивом, или интерфейсом.

Если objectref не null и экземпляр разрешенного класса, массива, или интерфейса, instanceof_quick инструкция продвигает int результат 1 как интервал на стеке операнда. Иначе, это продвигает int результат 0.

Следующие правила используются, чтобы определить, ли objectref, который не является null экземпляр разрешенного типа: Если S является классом объекта, упомянутого objectref, и T является разрешенным классом, массивом, или тип экземпляра, instanceof_quick определяет, является ли objectref экземпляром T следующим образом:

S не может быть интерфейсным типом, потому что нет никаких экземпляров интерфейсов, только экземпляры классов и массивов.

Примечания
Код операции этой инструкции был первоначально instanceof. Операнды instanceof инструкции не изменяются.

invokeinterface_quick invokeinterface_quick

Работа
Вызовите интерфейсный метод

invokeinterface_quick
idbyte1
idbyte2
nargs
предположить

Формы
invokeinterface_quick = 218 (0xda)

Стек
..., objectref, [arg1, [arg2...]]...

Описание
idbyte1 без знака и idbyte2 используются, чтобы создать идентификатор для имени и дескриптора (§4.3.3) требуемого метода, где значение идентификатора (idbyte1 << 8) | idbyte2.

nargs операнд является байтом без знака, который не должен быть нулем. objectref должен иметь тип reference и должен сопровождаться на стеке операндов nargs - 1 слово параметров. Таблица метода класса типа objectref определяется. Если objectref является типом массива, то таблица метода класса Object используется.

Предположение без знака используется, чтобы индексировать в таблицу метода. Если есть метод в индексном предположении, и если его идентификатор идентичен созданному идентификатору, то тот метод выбирается. Иначе, таблица метода ищется метод, идентификатор которого идентичен созданному идентификатору. Если Вы находитесь, текущая стоимость предположения перезаписывается тем индексом.

Результатом поиска является запись таблицы метода, которая включает прямую ссылку на код для интерфейсного метода и информации о модификаторе метода ((см. Таблицу 4.4, "Доступ метода и модификатор отмечают"). Запись таблицы метода должна быть записью таблицы a public метод.

invokeinterface_quick (продолжение следует). invokeinterface_quick (продолжение следует).

Если метод synchronized, монитор, связанный с objectref, получается.

Если метод не native, nargs - 1 слово параметров и objectref выталкивается от стека операнда. Новый стековый фрейм создается для метода, вызываемого, и objectref и слова параметров делаются значениями своих первых nargs локальных переменных, с objectref в локальной переменной 0, arg1 в локальной переменной 1, и так далее. Новый стековый фрейм тогда делается текущим, и виртуальная машина Java pc устанавливается в код операции первой инструкции метода быть вызванным. Выполнение продолжается с первой инструкцией метода.

Если метод native и зависимый от платформы код, который реализует это, еще не был загружен и соединен в виртуальную машину Java, которая делается. nargs - 1 слово параметров и objectref выталкивается от стека операнда; код, который реализует метод, вызывается зависящим от реализации способом.

Соединение Исключений
Если никакой метод, соответствующий разрешенное имя и дескриптор, не может быть найден в классе objectref, invokeinterface_quick бросает IncompatibleClassChangeError.

Иначе, если выбранный метод является классом (static) метод, invokeinterface_quick инструкция бросает IncompatibleClassChangeError.

Иначе, если выбранный метод не public, в - vokeinterface_quick инструкция бросает IllegalAccess-Error.

Иначе, если выбранный метод abstract, вызовите-interface_quick броски AbstractMethodError.

Иначе, если выбранный метод native и код, который реализует метод, не может быть загружен или соединен, вызвать-interface_quick броски UnsatisfiedLinkError.

invokeinterface_quick (продолжение следует). invokeinterface_quick (продолжение следует).

Исключение на этапе выполнения
Иначе, если objectref null, invokeinterface_quick инструкция бросает a NullPointerException.

Примечания
Код операции этой инструкции был первоначально invokeinterface. Начальное значение предположения 0, значение операнда, предоставленное invokeinterface. Идентификаторы, сравниваемые и сохраненные в invokeinterface_quick инструкции, кодируют имя метода и дескриптор как 16-разрядное количество, которое может быть сравнено быстро. Детали кодирования специфичны для реализации. Байты идентификатора для вызываемого метода, idbyte1 и idbyte2, заменяют исходные постоянные индексные байты пула. Идентификатор может быть вычислен, когда каждый метод загружается, или во время выполнения. Значение nargs операнда не изменяется.

invokenonvirtual_quick invokenonvirtual_quick

Работа
Вызовите метод инициализации экземпляра или закрытый метод, диспетчеризируя основанный на типе времени компиляции

invokenonvirtual_quick
indexbyte1
indexbyte2

Формы
invokenonvirtual_quick = 215 (0xd7)

Стек
..., objectref, [arg1, [arg2...]]...

Описание
indexbyte1 без знака и indexbyte2 используются, чтобы создать индекс в постоянный пул текущего класса (§3.6), где значение индекса (indexbyte1 << 8) | indexbyte2. Постоянный элемент пула по индексу должен быть a CONSTANT_Methodref (§4.4.2), который, должно быть, уже был разрешен успешно. Постоянная запись пула, представляющая разрешенный метод, включает прямую ссылку на код для метода, байт без знака nargs, который должен быть больше чем нуль, и информация о модификаторе метода (см. Таблицу 4.4, "Доступ метода и модификатор отмечают").

Если метод synchronized, монитор, связанный с objectref, получается.

Если метод не native, nargs - 1 слово параметров и objectref выталкивается от стека операнда. Новый стековый фрейм создается для метода, вызываемого, и objectref и слова параметров делаются значениями своих первых nargs локальных переменных, с objectref в локальной переменной 0, arg1 в локальной переменной 1, и так далее. Новый стековый фрейм тогда делается текущим, и виртуальная машина Java pc устанавливается в код операции первой инструкции метода быть вызванным. Выполнение продолжается с первой инструкцией метода.

Если метод native, nargs - 1 слово параметров и objectref выталкивается от стека операнда; код, который реализует метод, вызывается зависящим от реализации способом.

invokenonvirtual_quick (продолжение следует). invokenonvirtual_quick (продолжение следует).

Исключение на этапе выполнения
Если objectref null, invokenonvirtual_quick инструкция бросает a NullPointerException.

Примечания
Код операции этой инструкции был первоначально invokespecial, и метод, который это вызвало, был решен динамически быть любой методом инициализации экземпляра <init> или a private метод. Операнды invokespecial инструкции не изменяются.

Различие между invokenonvirtual_quick и в - vokevirtual_quick_w инструкции - то, что invokevirtual_quick_w вызывает метод, основанный на фактическом (время выполнения) тип объекта. invokenonvirtual_quick инструкция вызывает метод инициализации экземпляра или private метод, основанный на типе времени компиляции объекта.

invokesuper_quick invokesuper_quick

Работа
Вызовите метод суперкласса, диспетчеризируя основанный на типе времени компиляции

invokesuper_quick
indexbyte1
indexbyte2

Формы
invokesuper_quick = 216 (0xd8)

Стек
..., objectref, [arg1, [arg2...]]...

Описание
indexbyte1 без знака и indexbyte2 используются, чтобы создать индекс в таблицу метода суперкласса текущего класса (§3.6), где значение индекса (indexbyte1 << 8) | indexbyte2. Указанная запись таблицы метода включает прямую ссылку на код для метода, байт без знака nargs, который должен быть больше чем нуль, и информация о модификаторе метода (см. Таблицу 4.4, "Доступ метода и модификатор отмечают").

Если метод synchronized, монитор, связанный с objectref, получается.

Если метод не native, nargs - 1 слово параметров и objectref выталкивается от стека операнда. Новый стековый фрейм создается для метода, вызываемого, и objectref и слова параметров делаются значениями своих первых nargs локальных переменных, с objectref в локальной переменной 0, arg1 в локальной переменной 1, и так далее. Новый стековый фрейм тогда делается текущим, и виртуальная машина Java pc устанавливается в код операции первой инструкции метода быть вызванным. Выполнение продолжается с первой инструкцией метода.

Если метод native, nargs - 1 слово параметров и objectref выталкивается от стека операнда; код, который реализует метод, вызывается зависящим от реализации способом.

invokesuper_quick (продолжение следует). invokesuper_quick (продолжение следует).

Исключение на этапе выполнения
Если objectref null, invokesuper_quick инструкция бросает a NullPointerException.

Примечания
Код операции этой инструкции был первоначально invokespecial, и метод, который это вызвало, был решен динамически быть методом в суперклассе текущего объекта. Операнды invokespecial инструкции не изменяются.

Различие между invokesuper_quick и invokevirtual_quick_w инструкциями - то, что invokevirtual_quick_w вызывает метод, основанный на классе объекта. invokesuper_quick инструкция используется, чтобы вызвать методы в суперклассе текущего класса.

invokesuper_quick инструкция была представлена в JDK Sun 1.0.2 выпуска, чтобы исправить ошибку в более ранних версиях виртуальной машины Java. До того выпуска invokespecial инструкция (тогда названный invokenonvirtual) всегда преобразовывалась бы в invokenonvirtual_quick инструкцию.

invokestatic_quick invokestatic_quick

Работа
Вызовите класс (статический) метод

invokestatic_quick
indexbyte1
indexbyte2

Формы
invokestatic_quick = 217 (0xd9)

Стек
..., [arg1, [arg2...]]...

Описание
indexbyte1 без знака и indexbyte2 используются, чтобы создать индекс в постоянный пул текущего класса (§3.6), где значение индекса (indexbyte1 << 8) | indexbyte2. Постоянный элемент пула по индексу должен быть a CONSTANT_Methodref (§4.4.2), который, должно быть, уже был разрешен успешно.

Постоянная запись пула, представляющая разрешенный метод, включает прямую ссылку на код для метода, байт без знака nargs, который может быть нулем, и информацией о модификаторе метода (см. Таблицу 4.4, "Доступ метода и модификатор отмечают").

Если метод synchronized, монитор, связанный с текущим классом, получается.

Если метод не native, nargs слова параметров выталкиваются от стека операнда. Новый стековый фрейм создается для метода, вызываемого, и слова параметров делаются значениями его первых nargs локальных переменных, с arg1 в локальной переменной 0, arg2 в локальной переменной 1, и так далее. Новый стековый фрейм тогда делается текущим, и виртуальная машина Java pc устанавливается в код операции первой инструкции метода быть вызванным. Выполнение продолжается с первой инструкцией метода.

Если метод native, nargs слова параметров выталкиваются от стека операнда; код, который реализует метод, вызывается зависящим от реализации способом.

Примечания
Код операции этой инструкции был первоначально invokestatic. Операнды invokestatic инструкции не изменяются.

invokevirtual_quick invokevirtual_quick

Работа
Вызовите метод экземпляра

invokevirtual_quick
индекс
nargs
; диспетчеризируйте основанный на классе

Формы
invokevirtual_quick = 214 (0xd6)

Стек
..., objectref, [arg1, [arg2...]]...

Описание
objectref должен иметь тип reference и должен сослаться на экземпляр класса. Индексный операнд является байтом без знака, и nargs операнд является байтом без знака, который не должен быть нулем. Индекс является индексом в таблицу метода класса типа objectref. Запись таблицы по тому индексу включает код метода и его информацию о модификаторе (см. Таблицу 4.4, "Доступ метода и модификатор отмечают").

Если метод synchronized, монитор, связанный с objectref, получается.

Если метод не native, nargs - 1 слово параметров и objectref выталкивается от стека операнда. Новый стековый фрейм создается для метода, вызываемого, и objectref и слова параметров делаются значениями своих первых nargs локальных переменных, с objectref в локальной переменной 0, arg1 в локальной переменной 1, и так далее. Новый стековый фрейм тогда делается текущим, и виртуальная машина Java pc устанавливается в код операции первой инструкции метода быть вызванным. Выполнение продолжается с первой инструкцией метода.

invokevirtual_quick (продолжение следует). invokevirtual_quick (продолжение следует).

Если метод native и зависимый от платформы код, который реализует это, еще не был загружен и соединен в виртуальную машину Java, которая делается. nargs - 1 слово параметров и objectref выталкивается от стека операнда; код, который реализует метод, вызывается зависящим от реализации способом.

Соединение Исключения
Если указанный метод native и код, который реализует метод, не может быть загружен или соединен, invokevirtual_quick инструкция бросает UnsatisfiedLinkError.

Исключение на этапе выполнения
Иначе, если objectref null, invokevirtual_quick инструкция бросает a NullPointerException.

Примечания
Код операции этой инструкции был первоначально invokevirtual с objectref, не обращающимся к экземпляру java.lang.Object и с операндами, определенными динамически, чтобы представить метод с табличным индексом метода 255 или меньше. Когда постоянная запись пула, на которую ссылается invokevirtual инструкция, разрешается, сгенерирован однобайтовый индекс для метода, на который это ссылается. Тот индекс заменяет первый байт операнда исходной invokevirtual инструкции. Второй байт операнда invokevirtual инструкции заменяется nargs, числом слов параметра, ожидаемых методом.

invokevirtual инструкция, обращающаяся к экземпляру java.lang.Object и с операндами, представляющими постоянный индекс пула 255 или меньше, будет вместо этого преобразован в invokevirtualobject_quick инструкцию. Любая invokevirtual инструкция с операндами, представляющими постоянный индекс пула, больше чем 255, будет преобразована в invokevirtual_quick_w инструкцию.

invokevirtual_quick_w invokevirtual_quick_w

Работа
Вызовите метод экземпляра

invokevirtual_quick_w
indexbyte1
indexbyte2
, диспетчеризация на классе (широкий индекс)

Формы
invokevirtual_quick_w = 226 (0xe2)

Стек
..., objectref, [arg1, [arg2...]]...

Описание
indexbyte1 без знака и indexbyte2 используются, чтобы создать индекс в постоянный пул текущего класса (§3.6), где индекс (indexbyte1 << 8) | indexbyte2. Постоянный элемент пула по индексу должен быть a CONSTANT_Methodref (§4.4.2), который, должно быть, уже был разрешен успешно. Постоянная запись пула, представляющая разрешенный метод, включает индекс без знака в таблицу метода разрешенного класса и байта без знака nargs, который не должен быть нулем.

objectref должен иметь тип reference. Индекс используется в качестве индекса в таблицу метода класса типа objectref. Если objectref является типом массива, то таблица метода класса Object используется. Запись таблицы по тому индексу включает код метода и его информацию о модификаторе (см. Таблицу 4.4, "Доступ метода и модификатор отмечают").

Если метод synchronized, монитор, связанный с objectref, получается.

invokevirtual_quick_w (продолжение следует). invokevirtual_quick_w (продолжение следует).

Если метод не native, nargs - 1 слово параметров и objectref выталкивается от стека операнда. Новый стековый фрейм создается для метода, вызываемого, и objectref и слова параметров делаются значениями своих первых nargs локальных переменных, с objectref в локальной переменной 0, arg1 в локальной переменной 1, и так далее. Новый стековый фрейм тогда делается текущим, и виртуальная машина Java pc устанавливается в код операции первой инструкции метода быть вызванным. Выполнение продолжается с первой инструкцией метода.

Если метод native и зависимый от платформы код, который реализует это, еще не был загружен и соединен в виртуальную машину Java, которая делается. nargs - 1 слово параметров и objectref выталкивается от стека операнда; код, который реализует метод, вызывается зависящим от реализации способом.

Соединение Исключения
Если указанный метод native и код, который реализует метод, не может быть загружен или соединен, invokevirtual_quick_w инструкция бросает UnsatisfiedLinkError.

Исключение на этапе выполнения
Иначе, если objectref null, invokevirtual_quick_w инструкция бросает a NullPointerException.

Примечания
Код операции этой инструкции был первоначально invokevirtual с операндами, решенными динамически представлять метод с табличным индексом метода, больше чем 255. Операнды invokevirtual инструкции не изменяются.

invokevirtual_quick и invokevirtualobject_quick инструкции только поддерживают однобайтовое смещение в таблицу метода objectref. invokevirtual_quick_w инструкция может привыкнуть к для вызовов методов, которые не могут быть представлены, используя invokevirtual_quick.

invokevirtualobject_quick invokevirtualobject_quick

Работа
Вызовите метод экземпляра

invokevirtualobject_quick
индекс
nargs
из класса java.lang.Object

Формы
invokevirtualobject_quick = 219 (0xdb)

Стек
..., objectref, [arg1, [arg2...]]...

Описание
objectref должен иметь тип reference. Индексный операнд является байтом без знака, и nargs операнд является байтом без знака, который не должен быть нулем. Индекс является индексом в таблицу метода класса типа objectref. Если objectref является типом массива, то таблица метода класса Object используется. Запись таблицы по тому индексу включает код метода и его информацию о модификаторе (см. Таблицу 4.4, "Доступ метода и модификатор отмечают").

Если метод synchronized, монитор, связанный с objectref, получается.

Если метод не native, nargs - 1 слово параметров и objectref выталкивается от стека операнда. Новый стековый фрейм создается для метода, вызываемого, и objectref и слова параметров делаются значениями своих первых nargs локальных переменных, с objectref в локальной переменной 0, arg1 в локальной переменной 1, и так далее. Новый стековый фрейм тогда делается текущим, и виртуальная машина Java pc устанавливается в код операции первой инструкции метода быть вызванным. Выполнение продолжается с первой инструкцией метода.

invokevirtualobject_quick (продолжение следует). invokevirtualobject_quick (продолжение следует).

Если метод native и зависимый от платформы код, который реализует это, еще не был загружен и соединен в виртуальную машину Java, которая делается. nargs - 1 слово параметров и objectref выталкивается от стека операнда; код, который реализует метод, вызывается зависящим от реализации способом.

Соединение Исключения
Если указанный метод native и код, который реализует метод, не может быть загружен или соединен, invokevirtual_quick бросает UnsatisfiedLinkError.

Исключение на этапе выполнения
Иначе, если objectref null, invokevirtualobject_quick инструкция бросает a NullPointerException.

Примечания
Код операции этой инструкции был первоначально invokevirtual, и это упомянуло метод класса java.lang.Object определенный динамически, чтобы иметь табличный индекс метода 255 или меньше. invokevirtualobject_quick инструкция определенно в пользу массивов.

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

invokevirtualobject_quick инструкция только поддерживает однобайтовый индекс в таблицу метода objectref. Объекты с большими количествами методов, возможно, не в состоянии иметь все свои методы, на которые ссылаются с _quick разновидностями. Это всегда корректно, если менее эффективный, чтобы отказаться преобразовать экземпляр invokevirtual инструкции к invokevirtualobject_quick.

invokevirtual инструкция, не обращающаяся к экземпляру java.lang.Object и с операндами, представляющими постоянный индекс пула 255 или меньше, будет вместо этого преобразован в invokevirtual_quick инструкцию. Любая invokevirtual инструкция с операндами, представляющими постоянный индекс пула, больше чем 255, будет преобразована в invokevirtual_quick_w инструкцию.



Содержание | Предыдущий | Следующий | Индекс

Спецификация Виртуальной машины Java (HTML, сгенерированный chsieh 13 марта 1997)
Авторское право © 1996, 1997 Sun Microsystems, Inc. Все права защищены
Пожалуйста, отправьте любые комментарии или исправления к doug.kramer@sun.com

free hit counter