这是 java 代码
public void test1(int j) {
synchronized (this) {
for (int i = 0; i < 10; i++) {
log.info("test1 {} - {}", j, i);
}
}
}
该方法 javap 反编译后的前面部分的指令截图
该方法 javap 反编译后的本地变量表如下:
我的问题一:slot 是本地变量表的索引吧。那一开始的本地变量表就如下图所示吗?没有 slot=2,难道是入参 j 占了 2 个位置?
第一条指令 aload_0 就是把本地变量表中 slot=0 的引用类型压入操作数栈。
我的第二个问题是,this 压入操作数栈后,本地变量表也就是 slot=0 的这个位置还会有 this 吗?
dup 指令复制操作数栈顶的 this,再压入到栈顶,也就是此时操作数栈有 2 个 this
我的第三个问题是:astore_3 这个指令的意思是将栈顶引用类型存入本第变量表的 slot=3 位置吗? slot=3 已经有 int i 了阿
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.