2014-02-08 29 views
2

源代码LocalVariableTable面积:如何理解javap的输出

public class Example { 
    public int plus(int a){ 
    int b = 1; 
    return a + b; 
    } 
} 

前一个文件的类的Deassemble结果:

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

查看the specs

开始是变量在字节码中定义的行,长度是定义它的字节码的行数。所以开始定义变量的范围。 我想Slot对应于索引,对于第一个变量本身大致为0,对于第二个为大约0,对于第三个等于2(对于双倍/长整数加上增加的偏移量)。