5

我正在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文档时发现了这个小宝石:

虚假

公共静态最终类型BOGUS

表示不可访问的值。代码无法访问此类型表示的值。当字节码重用具有不可合并类型的局部变量表位置时,就会发生这种情况。例如,编译代码在一个分支中使用相同位置的原始类型,而在另一个分支中使用引用类型。

我认为这种歧义也是导致表中“虚假”条目的原因locals......

于 2012-02-10T09:42:33.007 回答