如何理解javap输出中的LocalVariableTable区域

时间:2014-02-08 09:17:41

标签: java jvm jvm-hotspot

源代码:

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

我的问题是如何理解以下区域,LengthSlot在这里意味着什么:

  LocalVariableTable:
   Start  Length  Slot  Name     Signature
   0      6       0     this     LExample;
   0      6       1     a        I
   2      4       2     b        I

1 个答案:

答案 0 :(得分:1)

请参阅the specs

Start是字节码中定义变量的行,长度是定义它的字节码行数。所以start to length定义了变量的范围。 我猜Slot对应于索引,第一个变量本身大致为0,第二个变量大约为1,第三个变量大约为2,依此类推(加上双倍/长的情况下加上偏移量)。