虚拟机字节码执行过程
程序员文章站
2022-03-11 20:15:41
...
先看个例子吧.
方法定义:
```
public int calc(int a, int b, int c){
return (a+b) * c;
}
```
javap 查看其字节码
```
public int calc(int, int, int);
descriptor: (III)I
flags: ACC_PUBLIC
Code:
stack=2, locals=4, args_size=4
0: iload_1
1: iload_2
2: iadd
3: iload_3
4: imul
5: ireturn
LineNumberTable:
line 6: 0
LocalVariableTable:
Start Length Slot Name Signature
0 6 0 this Lcom/hanlin/fadp/other/Main;
0 6 1 a I
0 6 2 b I
0 6 3 c I
```
从局部变量表 slot1 处载入一个整数 a到操作数栈.
从局部变量表 slot2 处载入一个整数 b到操作数栈.
从操作数栈弹出2个数,执行整数相加,结果压入操作数栈.
从局部变量表 slot3 处在于一个整数 c 到操作数栈.
从操作数栈弹出两个数,执行相乘.
将操作数栈顶的数弹出,然后压入调用者的操作数栈的栈顶.
方法定义:
```
public int calc(int a, int b, int c){
return (a+b) * c;
}
```
javap 查看其字节码
```
public int calc(int, int, int);
descriptor: (III)I
flags: ACC_PUBLIC
Code:
stack=2, locals=4, args_size=4
0: iload_1
1: iload_2
2: iadd
3: iload_3
4: imul
5: ireturn
LineNumberTable:
line 6: 0
LocalVariableTable:
Start Length Slot Name Signature
0 6 0 this Lcom/hanlin/fadp/other/Main;
0 6 1 a I
0 6 2 b I
0 6 3 c I
```
从局部变量表 slot1 处载入一个整数 a到操作数栈.
从局部变量表 slot2 处载入一个整数 b到操作数栈.
从操作数栈弹出2个数,执行整数相加,结果压入操作数栈.
从局部变量表 slot3 处在于一个整数 c 到操作数栈.
从操作数栈弹出两个数,执行相乘.
将操作数栈顶的数弹出,然后压入调用者的操作数栈的栈顶.