Spec-Zone.ru › OpenJDK 27

Пакет java.lang.classfile.instruction

package java.lang.classfile.instruction

Предоставляет интерфейсы, описывающие инструкции кода для библиотеки java.lang.classfile.

Пакет java.lang.classfile.instruction содержит интерфейсы, описывающие инструкции кода. Реализации этих интерфейсов неизменяемы.

API этого пакета выполняют проверки на null и недопустимые аргументы, если не указано иное.

Чтение инструкций

Инструкции и псевдоинструкции обычно доступны из CodeModel, например CodeModel::forEach, и классифицируются с помощью сопоставления с образцом.

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

Из-за ленивого характера разбора файлов class, IllegalArgumentException, указывающее на некорректные данные файла class, может быть выброшено при любом вызове метода. Например, объект инструкции для TypeCheckInstruction может быть получен из CodeModel, но последующий вызов .type() может завершиться ошибкой IllegalArgumentException, поскольку инструкция ссылается на неверный индекс пула констант.

Запись инструкций

Запись инструкций выполняется с помощью CodeBuilder. Самый простой способ записать инструкцию — передать объект инструкции в CodeBuilder::with, который поддерживает все допустимые инструкции. При этом CodeBuilder предоставляет множество вспомогательных фабричных методов для удобного создания инструкций, названных в соответствии с их мнемониками. Эти методы доступа лаконичнее и зачастую эффективнее во время выполнения, чем передача объектов инструкций.

Из-за ограничений формата файла class некоторые инструкции могут быть непредставимы в CodeBuilder. В некоторых ситуациях, например для BranchInstruction, параметры Class-File API определяют, можно ли вместо этого использовать альтернативы при генерации кода. В противном случае их можно настроить на немедленное завершение с ошибкой, чтобы гарантировать соответствие команд CodeBuilder сгенерированным данным массива code.

См. Спецификацию виртуальной машины Java:
6.5 Инструкции
Начиная с версии:
24
Пакет Описание
java.lang.classfile
Предоставляет библиотеку для разбора, генерации и преобразования файлов классов.
java.lang.classfile.attribute
Предоставляет интерфейсы, описывающие атрибуты файлов class для библиотеки java.lang.classfile.
java.lang.classfile.constantpool
Предоставляет интерфейсы, описывающие записи пула констант для библиотеки java.lang.classfile.
Класс Описание
ArrayLoadInstruction
Моделирует инструкцию загрузки элемента массива в массиве code атрибута Code.
ArrayStoreInstruction
Моделирует инструкцию сохранения элемента массива в массиве code атрибута Code.
BranchInstruction
Моделирует инструкцию ветвления (условную или безусловную) в массиве code атрибута Code.
CharacterRange
Псевдоинструкция, моделирующая одну запись атрибута CharacterRangeTable.
ConstantInstruction
Моделирует инструкцию загрузки константы в массиве code атрибута Code, включая инструкции констант «встроенные», «аргументные» и «загрузки».
ConstantInstruction.ArgumentConstantInstruction
Моделирует инструкцию «аргументная константа», которая кодирует значение константы непосредственно в инструкции.
ConstantInstruction.IntrinsicConstantInstruction
Моделирует инструкцию «встроенная константа», которая кодирует значение константы в своем коде операции.
ConstantInstruction.LoadConstantInstruction
Моделирует инструкцию «загрузка константы», которая кодирует значение константы в пуле констант.
ConvertInstruction
Моделирует инструкцию преобразования примитивного типа в массиве code атрибута Code, например i2l.
DiscontinuedInstruction
Маркерный интерфейс для инструкций, исключенных из массива code атрибута Code.
DiscontinuedInstruction.JsrInstruction
Моделирует инструкции перехода к подпрограмме, исключенные из массива code атрибута Code начиная с основной версии файла класса 51 (JVMS §4.9.1).
DiscontinuedInstruction.RetInstruction
Моделирует инструкции возврата из подпрограммы, исключенные из массива code атрибута Code начиная с основной версии файла класса 51 (JVMS §4.9.1).
ExceptionCatch
Псевдоинструкция, моделирующая запись в массиве exception_table атрибута Code.
FieldInstruction
Моделирует инструкцию доступа к полю в массиве code атрибута Code.
IncrementInstruction
Моделирует инструкцию увеличения значения локальной переменной в массиве code атрибута Code.
InvokeDynamicInstruction
Моделирует инструкцию вызова динамически вычисляемой точки вызова в массиве code атрибута Code.
InvokeInstruction
Моделирует инструкцию вызова метода в массиве code атрибута Code, кроме invokedynamic.
LabelTarget
Псевдоинструкция, указывающая, что заданная метка соответствует текущей позиции в атрибуте Code.
LineNumber
Псевдоинструкция, указывающая, что код для заданного номера строки начинается после текущей позиции в атрибуте Code.
LoadInstruction
Моделирует инструкцию загрузки локальной переменной в массиве code атрибута Code.
LocalVariable
Псевдоинструкция, моделирующая одну запись атрибута LocalVariableTable.
LocalVariableType
Псевдоинструкция, моделирующая одну запись атрибута LocalVariableTypeTable.
LookupSwitchInstruction
Моделирует инструкцию lookupswitch в массиве code атрибута Code.
MonitorInstruction
Моделирует инструкцию monitorenter или monitorexit в массиве code атрибута Code.
NewMultiArrayInstruction
Моделирует инструкцию multianewarray в массиве code атрибута Code.
NewObjectInstruction
Моделирует инструкцию new в массиве code атрибута Code.
NewPrimitiveArrayInstruction
Моделирует инструкцию newarray в массиве code атрибута Code.
NewReferenceArrayInstruction
Моделирует инструкцию anewarray в массиве code атрибута Code.
NopInstruction
Моделирует инструкцию nop в массиве code атрибута Code.
OperatorInstruction
Моделирует инструкцию арифметической операции в массиве code атрибута Code.
ReturnInstruction
Моделирует инструкцию возврата из метода в массиве code атрибута Code.
StackInstruction
Моделирует инструкцию манипулирования стеком в массиве code атрибута Code.
StoreInstruction
Моделирует инструкцию сохранения локальной переменной в массиве code атрибута Code.
SwitchCase
Моделирует один вариант инструкции lookupswitch или tableswitch.
TableSwitchInstruction
Моделирует инструкцию tableswitch в массиве code атрибута Code.
ThrowInstruction
Моделирует инструкцию athrow в массиве code атрибута Code.
TypeCheckInstruction
Моделирует инструкцию instanceof или checkcast в массиве code атрибута Code.

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2026, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API