<< 30年前の自分に会えるとしたら、何を持って行くか。 | Home | gnome-terminalが爆走して、メモリを浪費する。 >>
PR: 転職    葬式    マンスリーマンション 神戸    北海道    環境    FX    不動産担保融資    桐ヶ谷斎場    海外旅行    専門学校   

static finalな定数がインラインされる理由。

int i = Integer.MIN_VALUE;

こういうのは、MIN_VALUEの値自体が利用者コードに埋め込まれるので、定数定義クラス側のみを変更し、利用者コードをコンパイルし直さないと、反映されない。これは割と有名な仕様。

この理由は、てっきりパフォーマンスのためだと、ずっと思っていたんだけど、今日JLSを改めて熟読していたら、こんなことが書いてあった。

13.4.9 final Fields and Constants
... (One reason for requiring inlining of constants is that switch statements require constants on each case, and no two such constant values may be the same. The compiler checks for duplicate constant values in a switch statement at compile time; the class file format does not do symbolic linkage of case values.)

定数をインライン展開する理由の1つは、switch文のcaseが定数を要求するためだ。2つ以上のcaseが同値の定数を持つことは許されない。コンパイラは、このような同値の値を持つcaseをコンパイル時に発見しなければならないので、クラスファイルは、caseの値に対してシンボルによるリンクを使用しない。

なるほどね〜。




コメント追加 トラックバック送信
このサイトの掲載内容は私自身の見解であり、必ずしもIBMの立場、戦略、意見を代表するものではありません。
日本アイ・ビー・エム 花井 志生 Since 1997.6.8