Spec-Zone .ru
спецификации, руководства, описания, API
|
Содержание | Предыдущий | Следующий | Индекс | Спецификация Виртуальной машины JavaTM |
ГЛАВА 6
Инструкция виртуальной машины Java состоит из кода операции, определяющего работу, которая будет выполняться, следоваться нулем или большим количеством операндов, воплощающих значения, которые будут управляться на. Эта глава сообщает подробности о формате каждой инструкции виртуальной машины Java и работы, которую это выполняет.
int
." Ограничения Главы 4 гарантируют, что все такие надежды будут фактически оправданы. Если некоторое ограничение ("должный" или "не должен") в описании инструкции не удовлетворяется во время выполнения, поведение виртуальной машины Java неопределено.
Реализация Sun виртуальной машины Java проверяет, что весь недоверяемый код виртуальной машины Java удовлетворяет статические и структурные ограничения во время загрузки, используя a class
верификатор файла (см. Раздел 4.9, "Проверка Файлов класса"). Таким образом виртуальная машина Java Sun будет только видеть допустимый class
файлы. Выполнение большинства проверки в class
время загрузки файла привлекательно в этом, проверки выполняются только однажды, существенно уменьшая объем работы, который должен быть сделан во время выполнения. Другие стратегии реализации возможны, при условии, что они выполняют Главу 12 Спецификации языка Java.
Альтернативно, наивная реализация виртуальной машины Java может проверить статические и структурные ограничения во время выполнения. Однако, у этого более ленивого подхода могут быть серьезные импликации производительности.
class
файлы (см. Главу 4, "Формат файла класса"), три кодов операций резервируются для внутреннего пользования реализацией виртуальной машины Java. Если Sun расширит набор команд виртуальной машины Java в будущем, то эти зарезервированные коды операций, как гарантируют, не будут использоваться. У двух из зарезервированных кодов операций, числа 254 (0xfe) и 255 (0xff), есть мнемоника impdep1 и impdep2, соответственно. Эти инструкции предназначаются, чтобы обеспечить "черные ходы" или прерывания к специфичной для реализации функциональности, реализованной в программном и аппаратном обеспечении, соответственно. Третий зарезервированный код операции, номер 202 (0xca), имеет мнемоническую точку останова и предназначается, чтобы использоваться отладчиками, чтобы реализовать точки останова.
Хотя эти коды операций были зарезервированы, они могут только использоваться в реализации виртуальной машины Java. Они не могут появиться в допустимом class
файлы. Инструменты, такие как отладчики или генераторы кода JIT (§3.12), который мог бы непосредственно взаимодействовать с кодом виртуальной машины Java, который был уже загружен и выполнен, могут встретиться с этими кодами операций. Такие инструменты должны попытаться вести себя корректно, если они встречаются с какой-либо из этих зарезервированных инструкций.
VirtualMachineError
когда внутреннее ограничение ошибки или ресурса препятствует тому, чтобы это реализовало семантику Языка Java. Спецификация виртуальной машины Java не может предсказать, где с ограничениями ресурса или внутренними ошибками можно встретиться и не передают под мандат точно, когда о них можно сообщить. Таким образом, любая из ошибок виртуальной машины, перечисленных как подклассы VirtualMachineError
в §2.15.4 может быть брошен в любое время во время работы виртуальной машины Java. Каждая ячейка в схеме формата инструкции представляет единственный 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