パッケージjava.lang.classfile.instruction


パッケージjava.lang.classfile.instruction

java.lang.classfileライブラリのコード手順を説明するインタフェースを提供します。

java.lang.classfile.instructionパッケージには、コード命令を記述するインタフェースが含まれています。 これらのインタフェースの実装は不変です。

特に指定がないかぎり、nullまたはnull要素を含む配列またはコレクションを引数としてクラス・ファイルAPIクラスまたはインタフェースのコンストラクタまたはメソッドに渡すと、NullPointerExceptionがスローされます。

指示の読取り

命令と疑似命令は、通常、CodeModel::forEachなどのCodeModelからアクセスされ、パターン・マッチングによって分類されます。

classファイルから読み取ると、命令は遅延して膨張します。これらの命令の内容は、ベア構造以外では、解析を高速化するために評価されません。 パターン・マッチングでフィルタされたものなど、ユーザーへの指示では、コード配列内の無関係な命令の不要な読取りを回避するために、コンテンツがオンデマンドで読み取られます。

classファイルの解析が遅延しているため、不正な形式のclassファイル・データを示すIllegalArgumentExceptionは、メソッドの起動時にスローできます。 たとえば、TypeCheckInstructionの命令オブジェクトはCodeModelから取得できますが、後続の.type()の起動はIllegalArgumentExceptionで失敗する可能性があります。これは、命令が不正な定数プール索引を参照しているためです。

命令の記述

命令の記述はCodeBuilderで行われます。 命令を記述する最も基本的な方法は、すべての有効な命令をサポートする命令オブジェクトをCodeBuilder::withに渡すことです。 ただし、CodeBuilderには、ニーモニックによって命名された命令を簡単に作成するための多数の「コンビニエンス・ファクトリ・メソッド」が用意されています。 これらのアクセサは、命令オブジェクトを渡すよりも簡潔で、多くの場合、実行時により効率的です。

classファイル形式の制限により、一部の命令はCodeBuilderで表現できない場合があります。 BranchInstructionの場合などの一部のシナリオでは、「クラス・ファイルAPI」オプションは、代わりにコード生成で代替を使用できるかどうかを制御します。 それ以外の場合は、CodeBuilderコマンドと生成されたcode配列データのパリティを確保するために、ファストに構成できます。

Java Virtual Machine仕様を参照してください:
6.5 手順
導入されたバージョン:
24