java - 如何计算 MethodVariableAccess 中的局部变量索引?

标签 java bytecode-manipulation byte-buddy jvm-bytecode

根据[1],在方法框架中,局部变量数组包含对被调用实例的引用、参数以及最后在方法代码中使用的任何其他变量。此外,longdouble 值占用两个局部变量。

当使用 Byte Buddy 通过堆栈操作生成方法的代码时,MethodVariableAccess.OffsetLoading 索引 longdouble 值是否会转换为单个值索引还是需要像直接使用 ASM 一样考虑这些类型的值来计算本地 var 索引?

[1] https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.6.1

最佳答案

MethodVariableAccess.OffsetLoading 访问未命名为索引的偏移量以准确区分。如果数组中包含longdouble 类型,则占用两个槽。 Byte Buddy 使用此抽象与 ASM 交互,其中调用相应访问者需要相同的偏移量。

关于java - 如何计算 MethodVariableAccess 中的局部变量索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40113920/

相关文章:

java - 在 Google App Engine 上使用 ByteBuddy 创建类时出现反射错误

java - 如何在 JScrollPane 中获取图像的 X 和 Y 位置

java - java while 循环中数字的除数

Java——需要使用菱形运算符; Android编译器合规级别与支持钻石运算符的级别之间存在冲突

python - 如何使用 importlib 重写字节码?

java - 是否有可能将 JVM 的汇编语言集成到标准的高级 Java 代码中?

scala - 是否有像Javassist这样的Scala感知高级字节码操作工具?

java - 使用 ByteBuddy 链/转换方法调用

java - 检查 java.util.date 和 MySql 时间戳是否属于同一天

java - 可以为加载类定义新字段