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

标签 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

最佳答案

参见 the specs :

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

关于java - 如何理解 javap 输出中的 LocalVariableTable 区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21644197/

相关文章:

Java小程序: AccessControlException again

java - 无法在单台机器上运行的多个 jar 中共享单例实例

scala - Sbt 程序集 JVM 设置

assembly - vmovdqu在这里做什么?

java - JVM 如何收集 ThreadDump 底层

java - 如何改进返回给定 int 数组的具有排序索引的 int 数组的代码?

java - 如何在window azure中运行java tcp服务器?

java - Mockito:抛出指定的已检查异常时为 "Checked exception is invalid for this method"

java - 如何在不破坏应用程序输出的情况下重定向 JVM 输出?

java - 如何为java代理指定类路径