Пакет java.lang.classfile.instruction
Предоставляет интерфейсы, описывающие инструкции кода для библиотеки java.lang.classfile.
The java.lang.classfile.instruction пакет содержит интерфейсы, описывающие инструкции кода. Реализации этих интерфейсов являются неизменяемыми. Если не указано иное, передача null или массива или коллекции, содержащей элемент null, в качестве аргумента конструктору или методу любого класса или интерфейса API файлов класса приведет к выбрасыванию исключения NullPointerException.
Чтение инструкций
Инструкции и псевдоинструкции обычно извлекаются изCodeModel, например, CodeModel::forEach, и категоризируются с помощью шаблоносопоставления. При чтении из файлов class инструкции загружаются лениво; содержимое этих инструкций, помимо базовой структуры, не оценивается для ускорения разбора. Инструкции, представляющие интерес для пользователя, например, отфильтрованные с помощью шаблоносопоставления, загружают свое содержимое по мере необходимости, чтобы избежать ненужного чтения не относящихся к ним инструкций в массиве кода.
Из-за ленивого характера разбора файлов class, исключение IllegalArgumentException, указывающее на некорректные данные файла class, может быть выброшено при вызове любого метода. Например, объект инструкции для TypeCheckInstruction может быть получен из CodeModel, но последующий вызов .type() может завершиться сбоем с IllegalArgumentException, поскольку инструкция ссылается на неверный индекс константного пула.
Запись инструкций
Запись инструкций происходит наCodeBuilder. Наиболее простой способ записи инструкций — передать объект инструкции в CodeBuilder::with, который поддерживает все допустимые инструкции. Тем не менее, CodeBuilder предоставляет множество удобных методов-фабрик для простого создания инструкций, названных по их мнемонике. Эти методы более лаконичны и часто более эффективны во время выполнения, чем передача объектов инструкций. Из-за ограничений в формате файла class некоторые инструкции могут быть не представлены в CodeBuilder. В некоторых сценариях, таких как для BranchInstruction, параметры API файлов классов управляют использованием альтернатив при генерации кода вместо этого. В противном случае их можно настроить на быстрый сбой, чтобы гарантировать соответствие команд CodeBuilder данным массива code, сгенерированным кодом.
- См. Спецификацию виртуальной машины Java:
- 6.5 Инструкции
- С:
- 24
| Класс | Описание |
|---|---|
| ArrayLoadInstruction | Моделирует инструкцию загрузки массива в массиве code атрибута Code. |
| ArrayStoreInstruction | Моделирует инструкцию сохранения в массив в массиве code атрибута Code. |
| BranchInstruction | Моделирует инструкцию ветвления (условного или безусловного) в массиве
code атрибута Code. |
| CharacterRange | Псевдоинструкция, которая моделирует одну запись в атрибуте CharacterRangeTable. |
| ConstantInstruction | Моделирует инструкцию загрузки константы в массив code атрибута
Code, включая инструкции констант ""встроенные"", ""аргумент"" и ""загрузка" констант. |
| ConstantInstruction.ArgumentConstantInstruction | Моделирует инструкцию "константа аргумента", которая кодирует значение константы непосредственно в инструкции. |
| ConstantInstruction.IntrinsicConstantInstruction | Моделирует инструкцию "встроенная константа", которая кодирует значение константы в своём коде операции. |
| ConstantInstruction.LoadConstantInstruction | Моделирует инструкцию "загрузка константы", которая кодирует значение константы в пуле констант. |
| ConvertInstruction | |
| DiscontinuedInstruction | Маркерный интерфейс для инструкции, исключённой из массива code атрибута Code. |
| DiscontinuedInstruction.JsrInstruction | |
| DiscontinuedInstruction.RetInstruction | |
| ExceptionCatch | Псевдоинструкция, моделирующая запись в массиве exception_table атрибута Code. |
| FieldInstruction | Моделирует инструкцию доступа к полю в массиве code атрибута Code. |
| IncrementInstruction | Моделирует инструкцию инкремента локальной переменной в массиве code атрибута Code. |
| InvokeDynamicInstruction | Моделирует инструкцию вызова динамически вычисляемого места вызова в массиве code атрибута Code. |
| InvokeInstruction | |
| LabelTarget | Псевдоинструкция, которая указывает, что указанная метка соответствует текущей позиции в атрибуте Code. |
| LineNumber | Псевдоинструкция, которая указывает, что код для данной строки номера начинается после текущей позиции в атрибуте Code. |
| LoadInstruction | Моделирует инструкцию загрузки локальной переменной в массив code атрибута Code. |
| LocalVariable | Псевдоинструкция, которая моделирует одну запись в атрибуте LocalVariableTable. |
| LocalVariableType | Псевдоинструкция, которая моделирует одну запись в атрибуте LocalVariableTypeTable. |
| LookupSwitchInstruction | |
| MonitorInstruction | |
| NewMultiArrayInstruction | |
| NewObjectInstruction | |
| NewPrimitiveArrayInstruction | |
| NewReferenceArrayInstruction | |
| NopInstruction | |
| OperatorInstruction | Моделирует инструкцию арифметического оператора в массиве code атрибута Code. |
| ReturnInstruction | Моделирует инструкцию возврата из метода в массиве code атрибута Code. |
| StackInstruction | Моделирует инструкцию манипулирования стеком в массиве code атрибута Code. |
| StoreInstruction | Моделирует инструкцию сохранения локальной переменной в массиве code атрибута Code. |
| SwitchCase | Моделирует отдельный случай в инструкции lookupswitch или tableswitch. |
© 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.
https://download.java.net/java/early_access/jdk24/docs/api/java.base/java/lang/classfile/instruction/package-summary.html