パッケージ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
-
インタフェースクラス説明
Code属性のcode配列内の配列ロード命令をモデル化します。Code属性のcode配列内の配列ストア命令をモデル化します。Code属性のcode配列の分岐命令(条件付きまたは無条件)をモデル化します。CharacterRangeTable属性内の単一のエントリをモデル化する擬似命令。"intrinsic"、"argument"、"load"定数命令など、Code属性のcode配列の定数ロード命令をモデル化します。命令の定数値を直接エンコードする"引数定数"命令をモデル化します。定数値をopcodeにエンコードする"組み込み定数"命令をモデル化します。定数値を定数プールにエンコードする"ロード定数"命令をモデル化します。i2lなどのCode属性のcode配列のプリミティブ変換命令をモデル化します。命令のマーカー・インタフェースが、Code属性のcode配列から中断されました。Code属性のexception_table配列内のエントリをモデル化する擬似命令。Code属性のcode配列内のフィールド・アクセス命令をモデル化します。Code属性のcode配列のローカル変数増分命令をモデル化します。Code属性のcode配列で動的に計算されるコール・サイト起動命令をモデル化します。invokedynamic以外のCode属性のcode配列のメソッド呼出し命令をモデル化します。指定されたラベルがCode属性の現在の位置に対応していることを示す擬似命令。特定の行番号のコードを示す疑似命令は、Code属性の現在の位置より後に始まります。Code属性のcode配列内のローカル変数ロード命令をモデル化します。LocalVariableTable属性内の単一のエントリをモデル化する擬似命令。LocalVariableTypeTable属性内の単一のエントリをモデル化する擬似命令。Code属性のcode配列のlookupswitch命令をモデル化します。Code属性のcode配列のmonitorenterまたはmonitorexit命令をモデル化します。Code属性のcode配列のmultianewarray命令をモデル化します。Code属性のcode配列のnew命令をモデル化します。Code属性のcode配列のnewarray命令をモデル化します。Code属性のcode配列のanewarray命令をモデル化します。Code属性のcode配列のnop命令をモデル化します。Code属性のcode配列内の算術演算子命令をモデル化します。Code属性のcode配列内のメソッドからの戻り命令をモデル化します。Code属性のcode配列内のスタック操作命令をモデル化します。ローカル変数ストア命令をCode属性のcode配列にモデル化します。lookupswitchまたはtableswitch命令で1つのケースをモデル化します。Code属性のcode配列のtableswitch命令をモデル化します。Code属性のcode配列のathrow命令をモデル化します。Code属性のcode配列のinstanceofまたはcheckcast命令をモデル化します。