Spec-Zone.ru › OpenJDK 24

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

package 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
Пакет Описание
java.lang.classfile
Предоставляет библиотеку для разбора, генерации и преобразования файлов class.
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 со времени версии класса major 51 (JVMS 4.9.1).
DiscontinuedInstruction.RetInstruction
Моделирует инструкции возврата из подпрограммы, исключённые из массива code атрибута Code со времени версии класса major 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.

© 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

Spec-Zone.ru

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