列挙型クラスClassFile.StackMapsOption
java.lang.Object
java.lang.Enum<ClassFile.StackMapsOption>
java.lang.classfile.ClassFile.StackMapsOption
- すべての実装されたインタフェース:
Serializable
,ClassFile.Option
,Comparable<ClassFile.StackMapsOption>
,Constable
- 含まれているインタフェース:
ClassFile
public static enum ClassFile.StackMapsOption extends Enum<ClassFile.StackMapsOption> implements ClassFile.Option
スタック・マップを生成するかどうかを説明するオプションです。 デフォルトは
STACK_MAPS_WHEN_REQUIRED
で、スタック・マップを生成するか、互換性がある場合は既存のマップを再利用します。
StackMapTableAttribute
は、Code
属性から導出されたプロパティで、Java Virtual Machineが1回で検証を実行できるようにします。 したがって、CodeModel
の一部としてモデル化されるのではなく、スタック・マップ生成を介してオンデマンドで計算されます。
「アクセスできないコード」またはレガシーの「ジャンプ・ルーチン」命令がある場合は、スタック・マップの生成がIllegalArgumentException
で失敗する可能性があります。 DROP_STACK_MAPS
オプションを使用すると、ユーザーはStackMapTableAttribute
をCodeBuilder
に指定することで、独自のスタック・マップを提供できます。
- Java Virtual Machine仕様を参照してください:
-
「4.10.1 タイプ・チェックによる検証」
- 導入されたバージョン:
- 24
- 関連項目:
-
ネストされたクラスのサマリー
クラスjava.lang.Enumで宣言されたネストされたクラス/インタフェース
Enum.EnumDesc<E extends Enum<E>>
-
列挙型定数のサマリー
列挙型定数列挙型定数説明スタック・マップ生成を実行しないでください。スタック・マップの生成を強制的に実行します。スタック・マップを生成するか、互換性がある場合は既存のマップを再利用します。 -
メソッドのサマリー
修飾子と型メソッド説明static ClassFile.StackMapsOption
指定された名前を持つこのクラスのenum定数を返します。static ClassFile.StackMapsOption[]
values()
この列挙クラスの定数を含む配列を宣言されている順序で 返します。
-
列挙型定数の詳細
-
STACK_MAPS_WHEN_REQUIRED
public static final ClassFile.StackMapsOption STACK_MAPS_WHEN_REQUIREDスタック・マップを生成するか、互換性がある場合は既存のマップを再利用します。 スタック・マップは、メジャー・バージョン50以上に存在します。 これらのバージョンでは、コード配列および例外ハンドラが変換後にまだ互換性がある場合、CodeBuilder
は互換性のあるスタック・マップ情報を再利用しようとします。それ以外の場合は、スタック・マップ生成を実行します。 ただし、メジャー・バージョンが50の場合、スタック・マップと互換性のないジャンプ・サブルーチン命令がcode
配列に存在することを許可するので、高速には失敗しません。 -
GENERATE_STACK_MAPS
public static final ClassFile.StackMapsOption GENERATE_STACK_MAPSスタック・マップの生成を強制的に実行します。 これにより、スタック・マップ生成が無条件で実行され、なんらかの理由で生成に失敗すると、高速に失敗します。 -
DROP_STACK_MAPS
public static final ClassFile.StackMapsOption DROP_STACK_MAPSスタック・マップ生成を実行しないでください。 コードにブランチまたは例外ハンドラがある場合は、ユーザーは独自のStackMapTableAttribute
をCodeBuilder
に指定する必要があります。そうしないと、生成されたコードの検証(JVMS 4.10.1)が失敗します。このオプションは、ユーザー指定の
StackMapTableAttribute
が考慮されるために必要です。 既存のCode
属性のスタック・マップは、このオプションを使用して次のように再利用できます:CodeAttribute code = method.findAttribute(Attributes.code()).orElseThrow(); // Note that StackMapTable may be absent, representing code with no branching code.findAttribute(Attributes.stackMapTable()).ifPresent(cob);
-
-
メソッドの詳細
-
values
public static ClassFile.StackMapsOption[] values()この列挙クラスの定数を含む配列を宣言されている順序で 返します。- 戻り値:
- この列挙クラスの定数を宣言されている順序で含む配列
-
valueOf
public static ClassFile.StackMapsOption valueOf(String name) 指定された名前を持つこのクラスのenum定数を返します。 文字列は、このクラスでenum定数を宣言するために使用される識別子と正確に一致する必要があります。 (不適切な空白文字は許可されません。)- パラメータ:
name
- 返される列挙型定数の名前。- 戻り値:
- 指定された名前を持つ列挙型定数
- スロー:
IllegalArgumentException
- この列挙型クラスに指定された名前の定数がない場合NullPointerException
- 引数がnullの場合
-