我正在使用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。
答案 0 :(得分:2)
我在查看this little gem文档时遇到了Javassist:
<强> BOGUS 强>
public static final类型 BOGUS
表示不可访问的值。代码无法访问此值 类型代表。当字节码重用本地变量表时会发生这种情况 具有非可合并类型的位置。一个例子是编译代码 它在一个分支中使用相同位置作为基本类型,并且a 另一个分支中的引用类型。
我认为这种歧义导致locals
表中的“虚假”条目也是......