6 JVM Constants API

JVM Constants APIは、パッケージjava.lang.constants内で定義され、ここには様々なタイプのロード可能定数の名目的記述子が格納されています。これらの名目的記述子は、クラス・ファイルや、コンパイル時またはリンク時のプログラム分析ツールを操作するアプリケーションに有用です。

名目的記述子はロード可能定数の値ではありませんが、その値の記述であり、クラスのロード・コンテキストに基づいて再構成できます。ロード可能定数とは、オペランド・スタックにプッシュしたり、invokedynamic命令のブートストラップ・メソッドの静的引数リストに表示したりできる、定数プール・エントリのことです。オペランド・スタックとは、JVM命令の入力の取得元および出力の格納先のことです。Javaクラス・ファイルごとに定数プールがあり、そこには、コンパイル時に認識される数値リテラルから実行時に解決する必要があるメソッド参照およびフィールド参照まで、様々な種類の定数が格納されています。

Classオブジェクトなど、参照が実行時に解決される非名目的なロード可能定数を使用する場合の問題は、その参照がクラスのロード・コンテキストの正確性と一貫性に依存するという点です。クラスのロードでは、実行したくないコードが実行されたり、アクセス関連やメモリー不足の例外がスローされるなどの悪影響が生じる可能性があります(これらは名目的記述子を使用することで回避できます)。また、クラスのロードがまったく不可能な場合もあります。

パッケージjava.lang.constantを参照してください。