欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【JVM】字节码解读

程序员文章站 2022-03-02 14:16:49
...
Java代码:

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循环结束------------------------------------
第十二步方法调用结束
相关标签: JVM