Содержание | Предыдущий | Следующий | ИндексСпецификация Виртуальной машины JavaTM


ГЛАВА 6

Набор команд Виртуальной машины Java


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


6.1 Предположения: Значение "Must"

Описание каждой инструкции всегда дается в контексте кода виртуальной машины Java, который удовлетворяет статические и структурные ограничения Главы 4, "Формат файла класса." В описании отдельных инструкций виртуальной машины Java мы часто утверждаем, что некоторая ситуация "должна", или "не должен" иметь место: "value2 должен иметь тип int." Ограничения Главы 4 гарантируют, что все такие надежды будут фактически оправданы. Если некоторое ограничение ("должный" или "не должен") в описании инструкции не удовлетворяется во время выполнения, поведение виртуальной машины Java неопределено.

Реализация Sun виртуальной машины Java проверяет, что весь недоверяемый код виртуальной машины Java удовлетворяет статические и структурные ограничения во время загрузки, используя a class верификатор файла (см. Раздел 4.9, "Проверка Файлов класса"). Таким образом виртуальная машина Java Sun будет только видеть допустимый class файлы. Выполнение большинства проверки в class время загрузки файла привлекательно в этом, проверки выполняются только однажды, существенно уменьшая объем работы, который должен быть сделан во время выполнения. Другие стратегии реализации возможны, при условии, что они выполняют Главу 12 Спецификации языка Java.

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


6.2 Зарезервированные Коды операций

В дополнение к кодам операций инструкций, определенных позже эта глава, которые используются в Java class файлы (см. Главу 4, "Формат файла класса"), три кодов операций резервируются для внутреннего пользования реализацией виртуальной машины Java. Если Sun расширит набор команд виртуальной машины Java в будущем, то эти зарезервированные коды операций, как гарантируют, не будут использоваться.

У двух из зарезервированных кодов операций, числа 254 (0xfe) и 255 (0xff), есть мнемоника impdep1 и impdep2, соответственно. Эти инструкции предназначаются, чтобы обеспечить "черные ходы" или прерывания к специфичной для реализации функциональности, реализованной в программном и аппаратном обеспечении, соответственно. Третий зарезервированный код операции, номер 202 (0xca), имеет мнемоническую точку останова и предназначается, чтобы использоваться отладчиками, чтобы реализовать точки останова.

Хотя эти коды операций были зарезервированы, они могут только использоваться в реализации виртуальной машины Java. Они не могут появиться в допустимом class файлы. Инструменты, такие как отладчики или генераторы кода JIT (§3.12), который мог бы непосредственно взаимодействовать с кодом виртуальной машины Java, который был уже загружен и выполнен, могут встретиться с этими кодами операций. Такие инструменты должны попытаться вести себя корректно, если они встречаются с какой-либо из этих зарезервированных инструкций.


6.3 Ошибки Виртуальной машины

Виртуальная машина Java бросает объект, который является экземпляром подкласса класса VirtualMachineError когда внутреннее ограничение ошибки или ресурса препятствует тому, чтобы это реализовало семантику Языка Java. Спецификация виртуальной машины Java не может предсказать, где с ограничениями ресурса или внутренними ошибками можно встретиться и не передают под мандат точно, когда о них можно сообщить. Таким образом, любая из ошибок виртуальной машины, перечисленных как подклассы VirtualMachineError в §2.15.4 может быть брошен в любое время во время работы виртуальной машины Java.


6.4 Набор команд виртуальной машины Java

Инструкции Java Virtual Machine представляются в этой главе записями формы, показанной в рисунке 6.1, в алфавитном порядке и каждое начало на новой странице.



Каждая ячейка в схеме формата инструкции представляет единственный 8-разрядный байт. Мнемосхема инструкции является своим именем. Его код операции является его числовым представлением и дается и в десятичных и в шестнадцатеричных формах. Только числовое представление фактически присутствует в коде виртуальной машины Java в a class файл.

Имейте в виду, что есть "операнды", сгенерированные во время компиляции и встроены в пределах инструкций виртуальной машины Java, так же как "операндов", вычисленных во время выполнения и предоставленный на стеке операнда. Хотя они предоставляются из нескольких различных областей, все эти операнды представляют ту же самую вещь: значения, которые будут управляться на выполняемой инструкцией виртуальной машины Java. Неявно беря многие из его операндов от его стека операнда, вместо того, чтобы представить их явно в его скомпилированном коде как дополнительные байты операнда, числа регистра, и т.д., код виртуальной машины Java остается компактным.

Некоторые инструкции представляются как элементы семейства связанных инструкций, совместно использующих единственное описание, формат, и схему стека операнда. Также, семейство инструкций включает несколько кодов операций и мнемоники кода операции; только мнемосхема семейства появляется в схеме формата инструкции, и отдельная строка форм перечисляет всю задействованную мнемонику и коды операций. Например, строка форм для lconst _ <l> семейство инструкций, давая мнемосхему и информацию о коде операции для этих двух инструкций в том семействе (lconst_0 и lconst_1),

Формы lconst_0 = 9 (0x9),

lconst_1 = 10 (0xa)


В описании инструкций виртуальной машины Java эффект выполнения инструкции на стеке операнда (§3.6.2) текущего фрейма (§3.6) представляется дословно со стеком, растущим слева направо и каждым словом (§3.4) представленный отдельно. Таким образом,

Стек ..., value1, value2

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


показывает работу, которая начинается при наличии одного Word value2 сверху стека операнда с одним Word value1 только ниже этого. В результате выполнения инструкции value1 и value2 выталкиваются от стека операнда и заменяются результатом с одним словом, который был вычислен инструкцией. Остаток от стека операнда, представленного замещающим знаком (...), незатронут выполнением инструкции.

Типы long и double возьмите два слова на стеке операнда. В представлении стека операнда каждое слово представляется, отдельно используя запись через точку:

Стек ..., value1.word1, value1.word2, value2.word1, value2.word2

..., результат word1, результат word2


Спецификация виртуальной машины Java не передает под мандат, как эти два слова используются, чтобы представить 64-разрядное long или double значение; это только требует, чтобы определенная реализация была внутренне непротиворечивой.



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

Спецификация Виртуальной машины Java

Авторское право © 1996, 1997 Sun Microsystems, Inc. Все права защищены
Пожалуйста, отправьте любые комментарии или исправления к jvm@java.sun.com



Spec-Zone.ru - all specs in one place



free hit counter