我使用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。
我在浏览Javassist文档时发现了这个小gem:
的
public static final Type BOGUS
表示一个不可访问的值。代码无法访问值this类型表示。它发生在字节码重用局部变量表时具有不可合并类型的位置。编译后的代码就是一个例子它在一个分支中为基本类型使用相同的位置,而在另一个分支中的引用类型
我认为这种模糊性也是导致locals
表中"伪造"条目的原因…