我想知道为什么Java Bytecode的行号不连续。
例如,在以下 getter 的(未列出)第 2 行和第 3 行中会发生什么?
public java.lang.String getX();
Code:
0: aload_0
1: getfield #2; //Field x:Ljava/lang/String;
4: areturn
我正在使用 ASM 框架来处理字节码。当使用树 API 访问方法的代码时,我也会得到这些“隐藏”指令(但是使用操作码 -1)。我想知道它们是干什么用的。
最佳答案
我不认为 0, 1, 4
是行号,而是字节码中的字节偏移量。
aload_0
是一个字节 getfield
是三个字节(一个操作码,一个带有两个字节的“索引”参数“areturn
是一个字节 所以
2
和 3
只是 getfield
操作的一部分。