一 出栈装入局部变量表指令
istore 将int类型值存入局部变量
lstore 将long类型值存入局部变量
fstore 将float类型值存入局部变量
dstore 将double类型值存入局部变量
astore 将将引用类型或returnAddress类型值存入局部变量
istore_0 将int类型值存入局部变量0
istore_1 将int类型值存入局部变量1
istore_2 将int类型值存入局部变量2
istore_3 将int类型值存入局部变量3
lstore_0 将long类型值存入局部变量0
lstore_1 将long类型值存入局部变量1
lstore_2 将long类型值存入局部变量2
lstore_3 将long类型值存入局部变量3
fstore_0 将float类型值存入局部变量0
fstore_1 将float类型值存入局部变量1
fstore_2 将float类型值存入局部变量2
fstore_3 将float类型值存入局部变量3
dstore_0 将double类型值存入局部变量0
dstore_1 将double类型值存入局部变量1
dstore_2 将double类型值存入局部变量2
dstore_3 将double类型值存入局部变量3
astore_0 将引用类型或returnAddress类型值存入局部变量0
astore_1 将引用类型或returnAddress类型值存入局部变量1
astore_2 将引用类型或returnAddress类型值存入局部变量2
astore_3 将引用类型或returnAddress类型值存入局部变量3
iastore 将int类型值存入数组中
lastore 将long类型值存入数组中
fastore 将float类型值存入数组中
dastore 将double类型值存入数组中
aastore 将引用类型值存入数组中
bastore 将byte类型或者boolean类型值存入数组中
castore 将char类型值存入数组中
sastore 将short类型值存入数组中
wide指令
wide 使用附加字节扩展局部变量索引
二 出栈装入局部变量表常用指令集
xstore_n | xstore_0 | xstore_1 | xstore_2 | xstore_3 |
istore_n | istore_0 | istore_1 | istore_2 | istore_3 |
lstore_n | lstore_0 | lstore_1 | lstore_2 | lstore_3 |
fstore_n | fstore_0 | fstore_1 | fstore_2 | fstore_3 |
dstore_n | dstore_0 | dstore_1 | dstore_2 | dstore_3 |
astore_n | astore_0 | astore_1 | astore_2 | astore_3 |
三 出栈装入局部变量表指令剖析
四 实战
1 代码
// 3.出栈装入局部变量表指令
public void store(int k, double d) {
int m = k + 2;
long l = 12;
String str = "atguigu";
float f = 10.0F;
d = 10;
}
2 字节码指令执行过程
3 槽位复用
a 代码
public void foo(long l, float f) {
{
int i = 0;
}
{
String s = "Hello, World";
}
}
b 图解