虚拟机栈的局部变量

    技术2022-07-11  114

    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
    Processed: 0.012, SQL: 9