在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下。
下面我们将以字节码的视角来分析循环控制指令
循环控制指令:
其实循环控制还是前面介绍的那些指令,例如while循环:
- // 从字节码角度来分析:循环控制指令
- public class T05_ByteAnalyseWhile {
- public static void main(String[] args) {
- int a = 0;
- while (a < 10) {
- a++;
- }
- }
- }
T05_ByteAnalyseWhile 字节码:使用javap -v T05_ByteAnalyseWhile.class,将java程序对应的字节码如下,并做了执行的注释。
- 0: iconst_0 // int型常量值0进栈
- 1: istore_1 // 将栈顶int型数值存入第二个局部变量,从0开始计数
- 2: iload_1 // 第二个int型局部变量进栈,从0开始计数
- 3: bipush 10 // 将一个byte型常量值推送至栈顶
- 5: if_icmpge 14 // 比较栈顶两int型数值大小,当结果大于等于0时跳转到14行
- 8: iinc 1, 1 // 指定int型变量增加指定值,即自增1
- 11: goto 2 // 无条件跳转
- 14: return // 当前方法返回void
上述是从字节码角度分析while,下面是从字节码角度分析do while:
- // 从字节码角度来分析:循环控制do while指令
- public class T06_ByteAnalyseDoWhile {
- public static void main(String[] args) {
- int a = 0;
- do {
- a++;
- } while (a < 10);
- }
- }
T06_ByteAnalyseDoWhile 字节码:使用javap -v T06_ByteAnalyseDoWhile.class,将java程序对应的字节码如下,并做了执行的注释。
- 0: iconst_0 // int型常量值0进栈
- 1: istore_1 // 将栈顶int型数值存入第二个局部变量,从0开始计数
- 2: iinc 1, 1 // 指定int型变量增加指定值,即自增1
- 5: iload_1 // 第二个int型局部变量进栈,从0开始计数
- 6: bipush 10 // 将一个byte型常量值推送至栈顶
- 8: if_icmplt 2 // 比较栈顶两int型数值大小,当结果小于0时跳转
- 11: return // 当前方法返回void
上述是从字节码角度分析do while,下面是从字节码角度分析 for 循环:
- // 从字节码角度来分析:循环控制 for 指令
- public class T07_ByteAnalyseFor {
- public static void main(String[] args) {
- for (int i = 0; i < 10; i++) {
-
- }
- }
- }
T07_ByteAnalyseFor 字节码:使用javap -v T07_ByteAnalyseFor.class,将java程序对应的字节码如下,并做了执行的注释。
- 0: iconst_0 // int型常量值0进栈
- 1: istore_1 // 将栈顶int型数值存入第二个局部变量,从0开始计数
- 2: iload_1 // 第二个int型局部变量进栈,从0开始计数
- 3: bipush 10 // 将一个byte型常量值推送至栈顶
- 5: if_icmpge 14 // 比较栈顶两int型数值大小,当结果大于等于0时跳转到14行
- 8: iinc 1, 1 // 指定int型变量增加指定值,即自增1
- 11: goto 2 // 无条件跳转
- 14: return // 当前方法返回void
注意:比较while 和 for 的字节码,会发现它们是一模一样的,殊途也能同归。所以我们编写的while 循环 与 for循环在底层是一样的执行。
文章最后,给大家推荐一些受欢迎的技术博客链接:
- Hadoop相关技术博客链接
- Spark 核心技术链接
- JAVA相关的深度技术博客链接
- 超全干货--Flink思维导图,花了3周左右编写、校对
- 深入JAVA 的JVM核心原理解决线上各种故障【附案例】
- 请谈谈你对volatile的理解?--最近小李子与面试官的一场“硬核较量”
- 聊聊RPC通信,经常被问到的一道面试题。源码+笔记,包懂
欢迎扫描下方的二维码或 搜索 公众号“10点进修”,我们会有更多、且及时的资料推送给您,欢迎多多交流!
评论记录:
回复评论: