5

クラスの 1 つで生成されたコードを調べるために を使用javapしていたところ、次の出力に気付きました。

...
frame_type = 255 /* full_frame */
  offset_delta = 11
  locals = [ class Test, double, int, double, double, bogus, bogus, int, int, class "[D" ]
  stack = []
...

localsテーブル内の「偽の」タイプ/変数エントリの意味は何ですか? それらはどのように引き起こされますか?結果のコードにどのような影響がありますか?

クラス ファイルは、Eclipse 3.7 コンパイラを使用して作成されjavap、OpenJDK-1.6b22 から取得されました。

4

1 に答える 1

2

Javassistのドキュメントを読んでいるときに、この小さな宝石に出会いました。

偽物

public static final タイプBOGUS

アクセスできない値を表します。コードは、この型が表す値にアクセスできません。これは、バイトコードがマージ不可能な型でローカル変数テーブルの位置を再利用する場合に発生します。例としては、ある分岐ではプリミティブ型に同じ位置を使用し、別の分岐では参照型を使用するコンパイル済みコードがあります。

このあいまいさが、localsテーブル内の「偽の」エントリの原因でもあると思います...

于 2012-02-10T09:42:33.007 に答える