【发布时间】:2018-10-12 21:37:49
【问题描述】:
我正在通过newLocal 从LocalVariableSorter 添加新的本地人。我要添加局部变量的方法是一个带有长参数的实例方法。我要添加两个本地人;一长一物。示例代码中没有其他本地变量。
因此,我预计会有以下插槽/索引:
0 - this
1 - the long param
3 - my 1st local added via `newLocal` - using two slots as it is a long
5 - my 2nd local added via `newLocal`
我从newLocal 返回的结果是 3 和 7。为什么会有这么大的差距?
更奇怪的是,当我使用这些索引添加 xSTORE 指令并使用 javap 检查结果时,它显示给我:
LSTORE 5
ASTORE 8
注意:不仅值与我传递给 xSTORE 指令的值不同,而且它们之间的差距现在是 3 而不是之前的 4。
生成的代码虽然有效。我只想了解这里发生了什么magic 以及为什么。
谢谢
【问题讨论】:
-
你能发布你的代码吗?另外,你确定你没有调用任何会隐式添加本地人的东西吗?尝试继承 LocalVariableSorter 并将打印语句添加到
newLocal。
标签: java bytecode java-bytecode-asm byte-buddy jvm-bytecode