源代码:
public class Example {
public int plus(int a){
int b = 1;
return a + b;
}
}
反汇编上一个文件类的结果:
public int plus(int);
Code:
Stack=2, Locals=3, Args_size=2
0: iconst_1
1: istore_2
2: iload_1
3: iload_2
4: iadd
5: ireturn
LineNumberTable:
line 5: 0
line 6: 2
LocalVariableTable:
Start Length Slot Name Signature
0 6 0 this LExample;
0 6 1 a I
2 4 2 b I
我的问题是如何理解以下区域,Length
,Slot
在这里意味着什么:
LocalVariableTable:
Start Length Slot Name Signature
0 6 0 this LExample;
0 6 1 a I
2 4 2 b I
答案 0 :(得分:1)
请参阅the specs:
Start是字节码中定义变量的行,长度是定义它的字节码行数。所以start to length定义了变量的范围。 我猜Slot对应于索引,第一个变量本身大致为0,第二个变量大约为1,第三个变量大约为2,依此类推(加上双倍/长的情况下加上偏移量)。