dhb*_*lah 4 java jvm bytecode bytecode-manipulation java-bytecode-asm
所以这是一个例子:
LocalVariableTable:
Start Length Slot Name Signature
0 133 0 this Lcom/my/class/Test;
2 131 1 a I
4 129 2 b I
7 126 3 i I
10 123 4 i2 I
16 117 5 o1 Ljava/lang/Integer;
31 102 6 o2 Ljava/lang/Integer;
Run Code Online (Sandbox Code Playgroud)
start和length是什么意思?为什么长度具有它的价值?为什么相同类型(整数)的长度不同?为什么长度可以更改,当我向类添加一些内容并重新编译它而不触及该特定的局部变量?
Start是此变量可见的起始字节码偏移量.长度是此变量可见的字节码字节数.通常从指向首先分配变量的字节码指令开始,或者指向方法参数的0和0 this.在你的情况下,似乎所有变量对方法的末尾都是有效的(start+length = 133对于每个变量),但是如果你在块中声明一些变量,它们的范围将会更短.
请注意,局部变量表(LVT)是可选的调试信息.它不是程序执行所必需的,可以-g:none在编译期间使用它关闭.此表的主要目的是使调试更方便:使用它可以确定每个字节码位置当前可见的变量,以便在变量窗格中显示它们,并在您退出变量范围后隐藏它们.此表也由java反编译器和代码分析器(如FindBugs)使用.
| 归档时间: |
|
| 查看次数: |
671 次 |
| 最近记录: |