javap本地表输出中的"伪造"条目

thk*_*ala 5 java javap

我正在javap研究为我的一个类生成的代码,并注意到以下输出:

...
frame_type = 255 /* full_frame */
  offset_delta = 11
  locals = [ class Test, double, int, double, double, bogus, bogus, int, int, class "[D" ]
  stack = []
...
Run Code Online (Sandbox Code Playgroud)

表中那些"假"类型/变量条目的含义是什么locals?它们是如何造成的?它们对生成的代码有什么影响?

类文件是使用Eclipse 3.7编译器生成的,javap来自OpenJDK-1.6b22.

thk*_*ala 2

我在查看Javassist文档时发现了这个小宝石

虚假

公共静态最终类型BOGUS

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

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