【JVM】字节码解读
程序员文章站
2022-03-02 14:16:49
...
Java代码:
Test 类<clinit>方法字节码:
[img]http://dl.iteye.com/upload/attachment/252352/2b087bdb-91a0-392c-9591-cdbd2b74ce74.jpg[/img]
详细解读:
public class Test2
{
public static int cout = 0;
static
{
for (int i=0; i<100; i++)
{
cout += i;
}
}
}
Test 类<clinit>方法字节码:
[img]http://dl.iteye.com/upload/attachment/252352/2b087bdb-91a0-392c-9591-cdbd2b74ce74.jpg[/img]
详细解读:
第一步将int型值0推送至栈顶
第二步把栈顶值0赋值给常量池索引位置为10的静态field
第三步将int型值0推送至栈顶
第四步将栈顶int型数值存入第一个本地变量
第五步无条件跳转到20,进行条件判断,是否执行for循环
第二十步将第一个int型本地变量推送至栈顶
第二十一步将单字节的常量值(-128~127)100推送至栈顶
第二十二步比较栈顶两int型数值大小,当结果小于等于0时跳转,跳转到第九步
-----------第二十二步满足条件继续执行
第九步获取Test类的常量池索引位置为10静态域值,并将其值压入栈顶
第十二步将第一个int型本地变量推送至栈顶
第十三步将栈顶两int型数值相加并将结果压入栈顶
第十四步把栈顶值赋值给常量池索引位置为10的静态field
第十七步递增第一个局部变量值
...循环
------------for循环结束------------------------------------
第十二步方法调用结束
上一篇: 几个不同逻辑间参数传递弱化的技巧