列挙型クラス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オプションを使用すると、ユーザーはStackMapTableAttributeCodeBuilderに指定することで、独自のスタック・マップを提供できます。

Java Virtual Machine仕様を参照してください:
「4.10.1 タイプ・チェックによる検証」
導入されたバージョン:
24
関連項目:
  • 列挙型定数の詳細

    • 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
      スタック・マップ生成を実行しないでください。 コードにブランチまたは例外ハンドラがある場合は、ユーザーは独自のStackMapTableAttributeCodeBuilderに指定する必要があります。そうしないと、生成されたコードの検証(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の場合