“假的” javap 本地表输出中的条目

发布于 2024-12-12 18:03:32 字数 383 浏览 0 评论 0 原文

我正在使用 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。

I was using javap to study the code produced for one of my classes and noticed the following output:

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

What is the meaning of those "bogus" type/variable entries in the locals table? How are they caused? What is their impact on the resulting code?

The class file was produced using the Eclipse 3.7 compiler and javap came from OpenJDK-1.6b22.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧夏天 2024-12-19 18:03:32

我发现这个浏览 rel="nofollow">Javassist 文档:

虚假

公共静态最终类型BOGUS

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

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

I came upon this little gem while going over the Javassist documentation:

BOGUS

public static final Type BOGUS

Represents a non-accessible value. Code cannot access the value this
type represents. It occurs when bytecode reuses a local variable table
position with non-mergable types. An example would be compiled code
which uses the same position for a primitive type in one branch, and a
reference type in another branch.

I presume that this ambiguity is what causes the "bogus" entries in the locals table as well...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文