Spec-Zone.ru › OpenJDK 25

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

package java.lang.classfile.instruction

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

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

Если не указано иное, передача null или массива либо коллекции, содержащих элемент null, в качестве аргумента конструктору или методу любого класса или интерфейса Class-File API приведёт к выбрасыванию NullPointerException.

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

К инструкциям и псевдоинструкциям обычно обращаются через 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, включая инструкции констант «intrinsic», «argument» и «load».
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, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/lang/classfile/instruction/package-summary.html

Spec-Zone.ru

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