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


A B C D F Г Я J L М. N P R S T W

i2b

Работа

Преобразовать int к byte

Формат

i2b

Формы

i2b = 145 (0x91)

Стек операнда

..., значение..., результат

Описание

Значение на вершине стека операнда должно иметь тип int. Это выталкивается от стека операнда, усеченного к a byte, тогда расширенный до знака на int результат. Тот результат продвигается на стек операнда.

Примечания

i2b инструкция выполняет сужающееся примитивное преобразование (§2.6.3). Это может потерять информацию о полной величине имеющей значение. У результата, возможно, также нет того же самого знака как значение.


i2c

Работа

Преобразовать int к char

Формат

i2c

Формы

i2c = 146 (0x92)

Стек операнда

..., значение..., результат

Описание

Значение на вершине стека операнда должно иметь тип int. Это выталкивается от стека операнда, усеченного к char, тогда расширенный до нуля на int результат. Тот результат продвигается на стек операнда.

Примечания

i2c инструкция выполняет сужающееся примитивное преобразование (§2.6.3). Это может потерять информацию о полной величине имеющей значение. У результата (который всегда положителен), возможно, также нет того же самого знака как значение.


i2d

Работа

Преобразовать int к double

Формат

i2d

Формы

i2d = 135 (0x87)

Стек операнда

..., значение..., результат

Описание

Значение на вершине стека операнда должно иметь тип int. Это выталкивается от стека операнда и преобразовывается в a double результат. Результат продвигается на стек операнда.

Примечания

i2d инструкция выполняет расширяющееся примитивное преобразование (§2.6.2). Поскольку все значения типа int являются точно представимыми типом double, преобразование точно.


i2f

Работа

Преобразовать int к float

Формат

i2f

Формы

i2f = 134 (0x86)

Стек операнда

..., значение..., результат

Описание

Значение на вершине стека операнда должно иметь тип int. Это выталкивается от стека операнда и преобразовывается в float результат используя IEEE 754 вокруг для самого близкого режима. Результат продвигается на стек операнда.

Примечания

i2f инструкция выполняет расширяющееся примитивное преобразование (§2.6.2), но может привести к потере точности потому что значения типа float имейте только 24 бита мантиссы.


i2l

Работа

Преобразовать int к long

Формат

i2l

Формы

i2l = 133 (0x85)

Стек операнда

..., значение..., результат

Описание

Значение на вершине стека операнда должно иметь тип int. Это выталкивается от стека операнда и расширяется до знака на a long результат. Тот результат продвигается на стек операнда.

Примечания

i2l инструкция выполняет расширяющееся примитивное преобразование (§2.6.2). Поскольку все значения типа int являются точно представимыми типом long, преобразование точно.


i2s

Работа

Преобразовать int к short

Формат

i2s

Формы

i2s = 147 (0x93)

Стек операнда

..., значение..., результат

Описание

Значение на вершине стека операнда должно иметь тип int. Это выталкивается от стека операнда, усеченного к a short, тогда расширенный до знака на int результат. Тот результат продвигается на стек операнда.

Примечания

i2s инструкция выполняет сужающееся примитивное преобразование (§2.6.3). Это может потерять информацию о полной величине имеющей значение. У результата, возможно, также нет того же самого знака как значение.


iadd

Работа

Добавить int

Формат

iadd

Формы

iadd = 96 (0x60)

Стек операнда

..., value1, value2..., результат

Описание

И value1 и value2 должны иметь тип int. Значения выталкиваются от стека операнда. int результатом является value1 + value2. Результат продвигается на стек операнда.

Результатом являются 32 бита младшего разряда истинного математического результата в достаточно широком two's-дополнительном формате, представленном как значение типа int. Если переполнение происходит, то знак результата, возможно, не то же самое как знак математической суммы двух значений.

Несмотря на то, что переполнение может произойти, выполнение iadd инструкции никогда не бросает исключение на этапе выполнения.


iaload

Работа

Загрузка int от массива

Формат

iaload

Формы

iaload = 46 (0x2e)

Стек операнда

..., arrayref, индекс..., значение

Описание

arrayref должен иметь тип reference и должен обратиться к массиву, компоненты которого имеют тип int. Индекс должен иметь тип int. И arrayref и индекс выталкиваются от стека операнда. int значение в компоненте массива по индексу получается и продвигается на стек операнда.

Исключения на этапе выполнения

Если arrayref null, iaload бросает a NullPointerException.

Иначе, если индекс не в пределах границ массива, на который ссылается arrayref, iaload инструкция бросает ArrayIndexOutOfBoundsException.


iand

Работа

Булевская переменная И int

Формат

iand

Формы

iand = 126 (0x7e)

Стек операнда

..., value1, value2..., результат

Описание

И value1 и value2 должны иметь тип int. Они выталкиваются от стека операнда. int результат вычисляется, беря поразрядное И (соединение) value1 и value2. Результат продвигается на стек операнда.


iastore

Работа

Хранилище в int массив

Формат

iastore

Формы

iastore = 79 (0x4f)

Стек операнда

..., arrayref, индекс, оценивают...

Описание

arrayref должен иметь тип reference и должен обратиться к массиву, компоненты которого имеют тип int. И индекс и значение должны иметь тип int. arrayref, индекс, и значение выталкиваются от стека операнда. int значение сохранено как компонент массива, индексированного индексом.

Исключения на этапе выполнения

Если arrayref null, iastore бросает a NullPointerException.

Иначе, если индекс не в пределах границ массива, на который ссылается arrayref, iastore инструкция бросает ArrayIndexOutOfBoundsException.


iconst _ <i>

Работа

Продвинуть int постоянный

Формат

iconst _ <i>

Формы

iconst_m1 = 2 (0x2) iconst_0 = 3 (0x3) iconst_1 = 4 (0x4) iconst_2 = 5 (0x5) iconst_3 = 6 (0x6) iconst_4 = 7 (0x7) iconst_5 = 8 (0x8)

Стек операнда

......, <i>

Описание

Продвиньте int постоянный <i> (-1, 0, 1, 2, 3, 4 или 5) на стек операнда.

Примечания

Каждое это семейство инструкций эквивалентно bipush <i> для соответствующего значения <i>, за исключением того, что операнд <i> неявен.


idiv

Работа

Разделиться int

Формат

idiv

Формы

idiv = 108 (0x6c)

Стек операнда

..., value1, value2..., результат

Описание

И value1 и value2 должны иметь тип int. Значения выталкиваются от стека операнда. int результатом является значение выражения value1 / value2 языка программирования Java. Результат продвигается на стек операнда.

int подразделение округляется к 0; то есть, частное, произведенное для int значения в n/d int оцените q, величина которого как можно больше, удовлетворяя. Кроме того q положителен, когда и n и d имеют тот же самый знак, но q отрицателен, когда и n и d имеют противоположные знаки.

Есть один особый случай, который не удовлетворяет это правило: если дивиденд является отрицательным целым числом самой большой величины для int введите, и делитель-1, затем переполнитесь, происходит, и результат равен дивиденду. Несмотря на переполнение, никакое исключение не выдается в этом случае.

Исключение на этапе выполнения

Если значение делителя в int подразделение 0, idiv бросает ArithmeticException.


if_acmp <cond>

Работа

Ответвление, если reference сравнение успешно выполняется

Формат

if_acmp <cond>
branchbyte1
branchbyte2

Формы

if_acmpeq = 165 (0xa5) if_acmpne = 166 (0xa6)

Стек операнда

..., value1, value2...

Описание

И value1 и value2 должны иметь тип reference. Они и выталкиваются от стека операнда и сравниваются. Результаты сравнения следующие:

Если сравнение успешно выполняется, branchbyte1 без знака и branchbyte2 используются, чтобы создать 16-разрядное смещение со знаком, где смещение вычисляется, чтобы быть (branchbyte1 << 8) | branchbyte2. Выполнение тогда продолжает при том смещении от адреса кода операции этого if_acmp <cond> инструкцию. Целевой адрес должен быть адресом кода операции инструкции в пределах метода, который содержит этот if_acmp <cond> инструкция.

Иначе, если сравнение перестало работать, выполнение продолжает в адресе инструкции после этого if_acmp <cond> инструкцию.


if_icmp <cond>

Работа

Ответвление, если int сравнение успешно выполняется

Формат

if_icmp <cond>
branchbyte1
branchbyte2

Формы

if_icmpeq = 159 (0x9f) if_icmpne = 160 (0xa0) if_icmplt = 161 (0xa1) if_icmpge = 162 (0xa2) if_icmpgt = 163 (0xa3) if_icmple = 164 (0xa4)

Стек операнда

..., value1, value2...

Описание

И value1 и value2 должны иметь тип int. Они и выталкиваются от стека операнда и сравниваются. Все сравнения подписываются. Результаты сравнения следующие:

Если сравнение успешно выполняется, branchbyte1 без знака и branchbyte2 используются, чтобы создать 16-разрядное смещение со знаком, где смещение вычисляется, чтобы быть (branchbyte1 << 8) | branchbyte2. Выполнение тогда продолжает при том смещении от адреса кода операции этого if_icmp <cond> инструкцию. Целевой адрес должен быть адресом кода операции инструкции в пределах метода, который содержит этот if_icmp <cond> инструкция.

Иначе, выполнение продолжает в адресе инструкции после этого if_icmp <cond> инструкцию.


если <cond>

Работа

Ответвление, если int сравнение с нулем успешно выполняется

Формат

если <cond>
branchbyte1
branchbyte2

Формы

ifeq = 153 (0x99) ifne = 154 (0x9a) iflt = 155 (0x9b) ifge = 156 (0x9c) ifgt = 157 (0x9d) ifle = 158 (0x9e)

Стек операнда

..., значение...

Описание

Значение должно иметь тип int. Это выталкивается от стека операнда и сравнивается с нулем. Все сравнения подписываются. Результаты сравнений следующие:

Если сравнение успешно выполняется, branchbyte1 без знака и branchbyte2 используются, чтобы создать 16-разрядное смещение со знаком, где смещение вычисляется, чтобы быть (branchbyte1 << 8) | branchbyte2. Выполнение тогда продолжается при том смещении от адреса кода операции этого если <cond> инструкция. Целевой адрес должен быть адресом кода операции инструкции в пределах метода, который содержит это если <cond> инструкция.

Иначе, выполнение продолжается в адресе инструкции после этого если <cond> инструкция.


ifnonnull

Работа

Ответвление, если reference нет null

Формат

ifnonnull
branchbyte1
branchbyte2

Формы

ifnonnull = 199 (0xc7)

Стек операнда

..., значение...

Описание

Значение должно иметь тип reference. Это выталкивается от стека операнда. Если значение не null, branchbyte1 без знака и branchbyte2 используются, чтобы создать 16-разрядное смещение со знаком, где смещение вычисляется, чтобы быть (branchbyte1 << 8) | branchbyte2. Выполнение тогда продолжается при том смещении от адреса кода операции этой ifnonnull инструкции. Целевой адрес должен быть адресом кода операции инструкции в пределах метода, который содержит эту ifnonnull инструкцию.

Иначе, выполнение продолжается в адресе инструкции, следующей этим ifnonnull инструкциям.


ifnull

Работа

Ответвление, если reference null

Формат

ifnull
branchbyte1
branchbyte2

Формы

ifnull = 198 (0xc6)

Стек операнда

..., значение...

Описание

Значение должно типа reference. Это выталкивается от стека операнда. Если значение null, branchbyte1 без знака и branchbyte2 используются, чтобы создать 16-разрядное смещение со знаком, где смещение вычисляется, чтобы быть (branchbyte1 << 8) | branchbyte2. Выполнение тогда продолжается при том смещении от адреса кода операции этой ifnull инструкции. Целевой адрес должен быть адресом кода операции инструкции в пределах метода, который содержит эту ifnull инструкцию.

Иначе, выполнение продолжается в адресе инструкции, следующей этим ifnull инструкциям.


iinc

Работа

Инкрементная локальная переменная постоянным

Формат

iinc
индекс
константа

Формы

iinc = 132 (0x84)

Стек операнда

Никакое изменение

Описание

Индекс является байтом без знака, который должен быть индексом в массив локальной переменной текущего фрейма (§3.6). Константа является непосредственным байтом со знаком. Локальная переменная по индексу должна содержать int. Константа значения сначала расширяется до знака на int, и затем локальная переменная по индексу постепенно увеличивается тем количеством.

Примечания

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


iload

Работа

Загрузка int от локальной переменной

Формат

iload
индекс

Формы

iload = 21 (0x15)

Стек операнда

......, значение

Описание

Индекс является байтом без знака, который должен быть индексом в массив локальной переменной текущего фрейма (§3.6). Локальная переменная по индексу должна содержать int. Значение локальной переменной по индексу продвигается на стек операнда.

Примечания

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


iload _ <n>

Работа

Загрузка int от локальной переменной

Формат

iload _ <n>

Формы

iload_0 = 26 (0x1a) iload_1 = 27 (0x1b) iload_2 = 28 (0x1c) iload_3 = 29 (0x1d)

Стек операнда

......, значение

Описание

<n> должен быть индекс в массив локальной переменной текущего фрейма (§3.6). Локальная переменная в <n> должна содержать int. Значение локальной переменной в <n> продвигается на стек операнда.

Примечания

Каждый из iload _ <n> инструкции является тем же самым как iload с индексом <n>, за исключением того, что операнд <n> неявен.


imul

Работа

Умножиться int

Формат

imul

Формы

imul = 104 (0x68)

Стек операнда

..., value1, value2..., результат

Описание

И value1 и value2 должны иметь тип int. Значения выталкиваются от стека операнда. int результатом является value1 * value2. Результат продвигается на стек операнда.

Результатом являются 32 бита младшего разряда истинного математического результата в достаточно широком two's-дополнительном формате, представленном как значение типа int. Если переполнение происходит, то знак результата, возможно, не то же самое как знак математической суммы двух значений.

Несмотря на то, что переполнение может произойти, выполнение imul инструкции никогда не бросает исключение на этапе выполнения.


ineg

Работа

Инвертировать int

Формат

ineg

Формы

ineg = 116 (0x74)

Стек операнда

..., значение..., результат

Описание

Значение должно иметь тип int. Это выталкивается от стека операнда. int результатом является арифметическое отрицание имеющее значение, - значение. Результат продвигается на стек операнда.

Для int значения, отрицание является тем же самым как вычитанием от нуля. Поскольку использование виртуальной машины Java two's-дополнительное представление для целых чисел и диапазона two's-дополнительных значений не симметрично, отрицание максимального отрицания int результаты в том же самом максимальном отрицательном числе. Несмотря на то, что переполнение произошло, никакое исключение не выдается.

Для всех int значения x, -x равняется (~x) + 1.


instanceof

Работа

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

Формат

instanceof
indexbyte1
indexbyte2

Формы

instanceof = 193 (0xc1)

Стек операнда

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

Описание

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

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

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

Соединение Исключений

Во время разрешения символьной ссылки на класс, массив, или интерфейсный тип, может быть выдано любое из исключений, задокументированных в Раздел 5.4.3.1.

Примечания

instanceof инструкция очень подобна checkcast инструкции. Это отличается по своей обработке null, его поведение, когда его тест перестал работать (checkcast выдает исключение, instanceof, продвигает код результата), и его эффект на стек операнда.


invokeinterface

Работа

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

Формат

invokeinterface
indexbyte1
indexbyte2
количество
0

Формы

invokeinterface = 185 (0xb9)

Стек операнда

..., objectref, [arg1, [arg2...]]...

Описание

indexbyte1 без знака и indexbyte2 используются, чтобы создать индекс в пул константы этапа выполнения текущего класса (§3.6), где значение индекса (indexbyte1 << 8) | indexbyte2. Элемент пула константы этапа выполнения по тому индексу должен быть символьной ссылкой на интерфейсный метод (§5.1), который дает имя и дескриптор (§4.3.3) интерфейсного метода так же как символьной ссылки на интерфейс, в котором должен быть найден интерфейсный метод. Именованный интерфейсный метод разрешается (§5.4.3.4). Интерфейсный метод не должен быть методом инициализации экземпляра (§3.9) или класс или интерфейсный метод инициализации (§3.9).

Операнд количества является байтом без знака, который не должен быть нулем. objectref должен иметь тип reference и должен сопровождаться на стеке операнда nargs значениями аргументов, где число, введите, и порядок значений должен быть непротиворечивым с дескриптором разрешенного интерфейсного метода. Значение четвертого байта операнда должно всегда быть нулем.

Позвольте C быть классом objectref. Фактический метод, который будет вызван, выбирается следующей процедурой поиска:

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

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

Если метод native и зависимый от платформы код, который реализует это, еще не был связан (§5.6) в виртуальную машину Java, которая делается. nargs значения аргументов и objectref выталкиваются от операнда, складывают и передаются как параметры к коду, который реализует метод. Любое значение аргумента, которое имеет тип с плавающей точкой, подвергается преобразованию набора значений (§3.8.3) до того, чтобы быть переданным в качестве параметра. Параметры передают, и код вызывается зависящим от реализации способом. Когда зависимый от платформы код возвращается:

Соединение Исключений

Во время разрешения символьной ссылки на интерфейсный метод может быть выдано любое из исключений, задокументированных в §5.4.3.4.

Исключения на этапе выполнения

Иначе, если objectref null, invokeinterface инструкция бросает a NullPointerException.

Иначе, если класс objectref не реализует разрешенный интерфейс, invokeinterface бросает IncompatibleClassChangeError.

Иначе, если никакой метод, соответствующий разрешенное имя и дескриптор, не выбирается, invokeinterface бросает AbstractMethodError.

Иначе, если выбранный метод не public, invokeinterface бросает IllegalAccessError.

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

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

Примечания

Операнд количества invokeinterface инструкции записывает меру числа значений аргументов, где значение аргумента типа long или введите double вносит два модуля значению количества, и параметр любого другого типа вносит один модуль. Эта информация может также быть получена из дескриптора выбранного метода. Избыточность является исторической.

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

nargs значения аргументов и objectref не являются непосредственными с первым nargs + 1 локальная переменная. Значения аргументов типов long и double должен быть сохранен в двух последовательных локальных переменных, таким образом больше, чем nargs локальные переменные могут быть обязаны передавать nargs значения аргументов к вызванному методу.


invokespecial

Работа

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

Формат

invokespecial
indexbyte1
indexbyte2

Формы

invokespecial = 183 (0xb7)

Стек операнда

..., objectref, [arg1, [arg2...]]...

Описание

indexbyte1 без знака и indexbyte2 используются, чтобы создать индекс в пул константы этапа выполнения текущего класса (§3.6), где значение индекса (indexbyte1 << 8) | indexbyte2. Элемент пула константы этапа выполнения по тому индексу должен быть символьной ссылкой на метод (§5.1), который дает имя и дескриптор (§4.3.3) метода так же как символьной ссылки на класс, в котором должен быть найден метод. Именованный метод разрешается (§5.4.3.3). Наконец, если разрешенный метод protected (§4.6), и это - или элемент текущего класса или элемент суперкласса текущего класса, тогда класс objectref должен быть или текущим классом или подклассом текущего класса.

Затем, разрешенный метод выбирается для вызова, если все следующие условия не являются истиной:

Если вышеупомянутые условия являются истиной, фактический метод, который будет вызван, выбирается следующей процедурой поиска. Позвольте C быть прямым суперклассом текущего класса:

objectref должен иметь тип reference и должен сопровождаться на стеке операнда nargs значениями аргументов, где число, введите, и порядок значений должен быть непротиворечивым с дескриптором выбранного метода экземпляра.

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

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

Если метод native и зависимый от платформы код, который реализует это, еще не был связан (§5.6) в виртуальную машину Java, которая делается. nargs значения аргументов и objectref выталкиваются от операнда, складывают и передаются как параметры к коду, который реализует метод. Любое значение аргумента, которое имеет тип с плавающей точкой, подвергается преобразованию набора значений (§3.8.3) до того, чтобы быть переданным в качестве параметра. Параметры передают, и код вызывается зависящим от реализации способом. Когда зависимый от платформы код возвращается, следующее имейте место:

Соединение Исключений

Во время разрешения символьной ссылки на метод может быть выдано любое из исключений, имеющих отношение к разрешению метода, задокументированному в Раздел 5.4.3.3.

Иначе, если разрешенный метод является методом инициализации экземпляра, и класс, в котором он объявляется, не является классом, на который символически ссылается инструкция, a NoSuchMethodError бросается.

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

Иначе, если никакой метод, соответствующий разрешенное имя и дескриптор, не выбирается, invokespecial бросает AbstractMethodError.

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

Исключения на этапе выполнения

Иначе, если objectref null, invokespecial инструкция бросает a NullPointerException.

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

Примечания

Различие между invokespecial и invokevirtual инструкциями - то, что invokevirtual вызывает метод, основанный на классе объекта. invokespecial инструкция используется, чтобы вызвать методы инициализации экземпляра (§3.9) так же как private методы и методы суперкласса текущего класса.

invokespecial инструкцию назвали invokenonvirtual до выпуска 1.0.2 JDK Sun.

nargs значения аргументов и objectref не являются непосредственными с первым nargs + 1 локальная переменная. Значения аргументов типов long и double должен быть сохранен в двух последовательных локальных переменных, таким образом больше, чем nargs локальные переменные могут быть обязаны передавать nargs значения аргументов к вызванному методу.


invokestatic

Работа

Вызовите класс (static) метод

Формат

invokestatic
indexbyte1
indexbyte2

Формы

invokestatic = 184 (0xb8)

Стек операнда

..., [arg1, [arg2...]]...

Описание

indexbyte1 без знака и indexbyte2 используются, чтобы создать индекс в пул константы этапа выполнения текущего класса (§3.6), где значение индекса (indexbyte1 << 8) | indexbyte2. Элемент пула константы этапа выполнения по тому индексу должен быть символьной ссылкой на метод (§5.1), который дает имя и дескриптор (§4.3.3) метода так же как символьной ссылки на класс, в котором должен быть найден метод. Именованный метод разрешается (§5.4.3.3). Метод не должен быть классом или интерфейсным методом инициализации (§3.9). Это должно быть static, и поэтому не может быть abstract.

На успешном разрешении метода класс, который объявил разрешенное поле, инициализируется (§5.5), если тот класс не был уже инициализирован.

Стек операнда должен содержать nargs значения аргументов, где число, введите, и порядок значений должен быть непротиворечивым с дескриптором разрешенного метода.

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

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

Если метод native и зависимый от платформы код, который реализует это, еще не был связан (§5.6) в виртуальную машину Java, которая делается. nargs значения аргументов выталкиваются от операнда, складывают и передаются как параметры к коду, который реализует метод. Любое значение аргумента, которое имеет тип с плавающей точкой, подвергается преобразованию набора значений (§3.8.3) до того, чтобы быть переданным в качестве параметра. Параметры передают, и код вызывается зависящим от реализации способом. Когда зависимый от платформы код возвращается, следующее имейте место:

Соединение Исключений

Во время разрешения символьной ссылки на метод может быть выдано любое из исключений, имеющих отношение к разрешению метода, задокументированному в Раздел 5.4.3.3.

Иначе, если разрешенный метод является методом экземпляра, invokestatic инструкция бросает IncompatibleClassChangeError.

Исключения на этапе выполнения

Иначе, если выполнение этой invokestatic инструкции вызывает инициализацию класса, на который ссылаются, invokestatic может бросить Error как детализировано в Разделе 2.17.5.

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

Примечания

nargs значения аргументов не являются непосредственными с первыми nargs локальными переменными. Значения аргументов типов long и double должен быть сохранен в двух последовательных локальных переменных, таким образом больше, чем nargs локальные переменные могут быть обязаны передавать nargs значения аргументов к вызванному методу.


invokevirtual

Работа

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

Формат

invokevirtual
indexbyte1
indexbyte2

Формы

invokevirtual = 182 (0xb6)

Стек операнда

..., objectref, [arg1, [arg2...]]...

Описание

indexbyte1 без знака и indexbyte2 используются, чтобы создать индекс в пул константы этапа выполнения текущего класса (§3.6), где значение индекса (indexbyte1 << 8) | indexbyte2. Элемент пула константы этапа выполнения по тому индексу должен быть символьной ссылкой на метод (§5.1), который дает имя и дескриптор (§4.3.3) метода так же как символьной ссылки на класс, в котором должен быть найден метод. Именованный метод разрешается (§5.4.3.3). Метод не должен быть методом инициализации экземпляра (§3.9) или класс или интерфейсный метод инициализации (§3.9). Наконец, если разрешенный метод protected (§4.6), и это - или элемент текущего класса или элемент суперкласса текущего класса, тогда класс objectref должен быть или текущим классом или подклассом текущего класса.

Позвольте C быть классом objectref. Фактический метод, который будет вызван, выбирается следующей процедурой поиска:

objectref должен сопровождаться на стеке операнда nargs значениями аргументов, где число, введите, и порядок значений должен быть непротиворечивым с дескриптором выбранного метода экземпляра.

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

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

Если метод native и зависимый от платформы код, который реализует это, еще не был связан (§5.6) в виртуальную машину Java, которая делается. nargs значения аргументов и objectref выталкиваются от операнда, складывают и передаются как параметры к коду, который реализует метод. Любое значение аргумента, которое имеет тип с плавающей точкой, подвергается преобразованию набора значений (§3.8.3) до того, чтобы быть переданным в качестве параметра. Параметры передают, и код вызывается зависящим от реализации способом. Когда зависимый от платформы код возвращается, следующее имейте место:

Соединение Исключений

Во время разрешения символьной ссылки на метод может быть выдано любое из исключений, имеющих отношение к разрешению метода, задокументированному в Раздел 5.4.3.3.

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

Исключения на этапе выполнения

Иначе, если objectref null, invokevirtual инструкция бросает a NullPointerException.

Иначе, если никакой метод, соответствующий разрешенное имя и дескриптор, не выбирается, invokevirtual бросает AbstractMethodError.

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

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

Примечания

nargs значения аргументов и objectref не являются непосредственными с первым nargs + 1 локальная переменная. Значения аргументов типов long и double должен быть сохранен в двух последовательных локальных переменных, таким образом больше, чем nargs локальные переменные могут быть обязаны передавать nargs значения аргументов к вызванному методу.


ior

Работа

Булевская переменная ИЛИ int

Формат

ior

Формы

ior = 128 (0x80)

Стек операнда

..., value1, value2..., результат

Описание

И value1 и value2 должны иметь тип int. Они выталкиваются от стека операнда. int результат вычисляется, беря поразрядное содержащее ИЛИ value1 и value2. Результат продвигается на стек операнда.


irem

Работа

Остаток int

Формат

irem

Формы

irem = 112 (0x70)

Стек операнда

..., value1, value2..., результат

Описание

И value1 и value2 должны иметь тип int. Значения выталкиваются от стека операнда. int результатом является value1 - (value1 / value2) * value2. Результат продвигается на стек операнда.

Результат irem инструкции так, что (a/b)*b + (a%b) равно a. Эти идентификационные данные содержат даже в особом случае, в котором дивиденд является отрицанием int из самой большой величины для ее типа и делителя -1 (остаток 0). Это следует из этого правила, что результат работы остатка может быть отрицательным, только если дивиденд отрицателен и может быть положительным, только если дивиденд положителен. Кроме того величина результата всегда является меньше чем величина делителя.

Исключение на этапе выполнения

Если значение делителя для int оператор остатка 0, irem бросает ArithmeticException.


ireturn

Работа

Возвратиться int от метода

Формат

ireturn

Формы

ireturn = 172 (0xac)

Стек операнда

..., оцените [пустой]

Описание

У текущего метода должен быть тип возврата boolean, byte, short, char, или int. Значение должно иметь тип int. Если текущий метод является a synchronized метод, монитор, полученный или повторно введенный на вызове метода, выпускается или выходится (соответственно) как будто выполнением monitorexit инструкции. Если никакое исключение не выдается, значение выталкивается от стека операнда текущего фрейма (§3.6) и продвигается на стек операнда фрейма invoker. Любые другие значения на стеке операнда текущего метода отбрасываются.

Интерпретатор тогда возвращает управление invoker метода, восстанавливая фрейм invoker.

Исключения на этапе выполнения

Если текущий метод является a synchronized метод и текущий поток не являются владельцем монитора, полученного или повторно введенного на вызове метода, ireturn бросает IllegalMonitorStateException. Это может произойти, например, если a synchronized метод содержит monitorexit инструкцию, но никакую monitorenter инструкцию, на объекте, на котором синхронизируется метод.

Иначе, если реализация виртуальной машины осуществляет правила о структурированном использовании блокировок, описанных в Разделе 8.13 и если первое из тех правил нарушается во время вызова текущего метода, то ireturn бросает IllegalMonitorStateException.


ishl

Работа

Сдвиг уехал int

Формат

ishl

Формы

ishl = 120 (0x78)

Стек операнда

..., value1, value2..., результат

Описание

И value1 и value2 должны иметь тип int. Значения выталкиваются от стека операнда. int результат вычисляется, смещаясь value1 оставленный s позициями двоичного разряда, где s является значением низких 5 битов value2. Результат продвигается на стек операнда.

Примечания

Это эквивалентно (даже если переполнение происходит) к умножению 2 к питанию s. Расстояние сдвига, фактически используемое, всегда находится в диапазоне от 0 до 31, включительно, как будто value2 были подвергнуты поразрядному логическому, И с маской оценивают 0x1f.


ishr

Работа

Право арифметического сдвига int

Формат

ishr

Формы

ishr = 122 (0x7a)

Стек операнда

..., value1, value2..., результат

Описание

И value1 и value2 должны иметь тип int. Значения выталкиваются от стека операнда. int результат вычисляется, смещаясь value1 прямо s позициями двоичного разряда с расширением знака, где s является значением низких 5 битов value2. Результат продвигается на стек операнда.

Примечания

Получающееся значение, где s является value2 & 0x1f. Для неотрицательного value1 это эквивалентно усечению int подразделение 2 к питанию s. Расстояние сдвига, фактически используемое, всегда находится в диапазоне от 0 до 31, включительно, как будто value2 были подвергнуты поразрядному логическому, И с маской оценивают 0x1f.


istore

Работа

Хранилище int в локальную переменную

Формат

istore
индекс

Формы

istore = 54 (0x36)

Стек операнда

..., значение...

Описание

Индекс является байтом без знака, который должен быть индексом в массив локальной переменной текущего фрейма (§3.6). Значение на вершине стека операнда должно иметь тип int. Это выталкивается от стека операнда, и значение локальной переменной по индексу устанавливается оценить.

Примечания

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


istore _ <n>

Работа

Хранилище int в локальную переменную

Формат

istore _ <n>

Формы

istore_0 = 59 (0x3b) istore_1 = 60 (0x3c) istore_2 = 61 (0x3d) istore_3 = 62 (0x3e)

Стек операнда

..., значение...

Описание

<n> должен быть индекс в массив локальной переменной текущего фрейма (§3.6). Значение на вершине стека операнда должно иметь тип int. Это выталкивается от стека операнда, и значение локальной переменной в <n> устанавливается оценить.

Примечания

Каждый из istore _ <n> инструкции является тем же самым как istore с индексом <n>, за исключением того, что операнд <n> неявен.


isub

Работа

Вычесть int

Формат

isub

Формы

isub = 100 (0x64)

Стек операнда

..., value1, value2..., результат

Описание

И value1 и value2 должны иметь тип int. Значения выталкиваются от стека операнда. int результатом является value1 - value2. Результат продвигается на стек операнда.

Для int вычитание, a - b приводит к тому же самому результату как a + (-b). Для int значения, вычитание от нуля является тем же самым как отрицанием.

Результатом являются 32 бита младшего разряда истинного математического результата в достаточно широком two's-дополнительном формате, представленном как значение типа int. Если переполнение происходит, то знак результата, возможно, не то же самое как знак математической суммы двух значений.

Несмотря на то, что переполнение может произойти, выполнение isub инструкции никогда не бросает исключение на этапе выполнения.


iushr

Работа

Право логического сдвига int

Формат

iushr

Формы

iushr = 124 (0x7c)

Стек операнда

..., value1, value2..., результат

Описание

И value1 и value2 должны иметь тип int. Значения выталкиваются от стека операнда. int результат вычисляется, смещаясь value1 прямо s позициями двоичного разряда с дополнением нулями, где s является значением низких 5 битов value2. Результат продвигается на стек операнда.

Примечания

Если value1 положителен, и s является value2 & 0x1f, результатом является то же самое как тот из value1>> s; если value1 отрицателен, результат равен значению выражения (value1>> s) + (2 << ~s). The addition of the (2 << ~s) term cancels out the propagated sign bit. The shift distance actually used is always in the range 0 to 31, inclusive.


ixor

Работа

Булев XOR int

Формат

ixor

Формы

ixor = 130 (0x82)

Стек операнда

..., value1, value2..., результат

Описание

И value1 и value2 должны иметь тип int. Они выталкиваются от стека операнда. int результат вычисляется, беря битовое исключающее "ИЛИ" value1 и value2. Результат продвигается на стек операнда.


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

Спецификация Виртуальной машины JavaTM
Авторское право © Sun Microsystems, Inc 1999 года. Все права защищены
Пожалуйста, отправьте любые комментарии или исправления к jvm@java.sun.com

free hit counter