虚拟机栈的局部变量

public class LocalVariableTest {
    private int count = 0;

    public static void main(String[] args) {
        method();
    }

    public static void method() {
        LocalVariableTest localVariableTest = new LocalVariableTest();
        Date date = new Date();
        int count = 10;
        System.out.println(count);
    }
}

我们来解析一下method()这个方法

javap -v LocalVariableTest.class

// main方法
  public static void main(java.lang.String[]);
  	// 入参是 String类型的数组,返回值是Void
    descriptor: ([Ljava/lang/String;)V
    // 方法修饰 public 和static
    flags: ACC_PUBLIC, ACC_STATIC
    Code:
      stack=0, locals=1, args_size=1
         0: invokestatic  #3                  // Method method:()V
         3: return
      LineNumberTable:
        line 14: 0
        line 15: 3
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       4     0  args   [Ljava/lang/String;


  public static void method();
  	// 入参是空,返回值是void
    descriptor: ()V
    // 方法修饰是 public static 
    flags: ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=3, args_size=0
         0: new           #4                  // class org/example/jvm/runtimedata/virtualmachinestack/LocalVariableTest
         3: dup
         4: invokespecial #5                  // Method "<init>":()V
         7: astore_0
         8: new           #6                  // class java/util/Date
        11: dup
        12: invokespecial #7                  // Method java/util/Date."<init>":()V
        15: astore_1
        16: bipush        10
        18: istore_2
        19: getstatic     #8                  // Field java/lang/System.out:Ljava/io/PrintStream;
        22: iload_2
        23: invokevirtual #9                  // Method java/io/PrintStream.println:(I)V
        26: return
       // jvm中对应关系,譬如 java文件中18行LocalVariableTest localVariableTest = new LocalVariableTest();
       // 对应  jvm指令行 0  0: new           #4                  // class org/example/jvm/runtimedata/virtualmachinestack/LocalVariableTest
      LineNumberTable:
        line 18: 0
        line 19: 8
        line 20: 16
        line 21: 19
        line 22: 26
      // 局部变量表:localVariableTest ,date,count  signature是对应着几个的类型,他们是在一个数组里面的
      // localVariableTest是数组index 0的位置,date是index 1的位置count是2的位置
      // start是jvm中发对应的局部变量开始生效的位置,length是有效的长度(不详)
      // jvm指令行中是0-26行,也就是一共27行,而start+length都是27
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            8      19     0 localVariableTest   Lorg/example/jvm/runtimedata/virtualmachinestack/LocalVariableTest;
           16      11     1  date   Ljava/util/Date;
           19       8     2 count   I

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值