首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Java字节码角度分析循环控制 ——提升硬实力4

  • 25-03-07 20:01
  • 4158
  • 7742
blog.csdn.net

在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下。

1.Java字节码的一段旅行经历——提升硬实力1

2.Java字节码角度分析a++ ——提升硬实力2

3.Java字节码角度分析条件判断指令 ——提升硬实力3

 

下面我们将以字节码的视角来分析循环控制指令


循环控制指令:

 其实循环控制还是前面介绍的那些指令,例如while循环:

  1. // 从字节码角度来分析:循环控制指令
  2. public class T05_ByteAnalyseWhile {
  3. public static void main(String[] args) {
  4. int a = 0;
  5. while (a < 10) {
  6. a++;
  7. }
  8. }
  9. }

T05_ByteAnalyseWhile 字节码:使用javap -v T05_ByteAnalyseWhile.class,将java程序对应的字节码如下,并做了执行的注释。

  1. 0: iconst_0 // int型常量值0进栈
  2. 1: istore_1 // 将栈顶int型数值存入第二个局部变量,从0开始计数
  3. 2: iload_1 // 第二个int型局部变量进栈,从0开始计数
  4. 3: bipush 10 // 将一个byte型常量值推送至栈顶
  5. 5: if_icmpge 14 // 比较栈顶两int型数值大小,当结果大于等于0时跳转到14行
  6. 8: iinc 1, 1 // 指定int型变量增加指定值,即自增1
  7. 11: goto 2 // 无条件跳转
  8. 14: return // 当前方法返回void

上述是从字节码角度分析while,下面是从字节码角度分析do while:

  1. // 从字节码角度来分析:循环控制do while指令
  2. public class T06_ByteAnalyseDoWhile {
  3. public static void main(String[] args) {
  4. int a = 0;
  5. do {
  6. a++;
  7. } while (a < 10);
  8. }
  9. }

T06_ByteAnalyseDoWhile 字节码:使用javap -v T06_ByteAnalyseDoWhile.class,将java程序对应的字节码如下,并做了执行的注释。

  1. 0: iconst_0 // int型常量值0进栈
  2. 1: istore_1 // 将栈顶int型数值存入第二个局部变量,从0开始计数
  3. 2: iinc 1, 1 // 指定int型变量增加指定值,即自增1
  4. 5: iload_1 // 第二个int型局部变量进栈,从0开始计数
  5. 6: bipush 10 // 将一个byte型常量值推送至栈顶
  6. 8: if_icmplt 2 // 比较栈顶两int型数值大小,当结果小于0时跳转
  7. 11: return // 当前方法返回void

上述是从字节码角度分析do while,下面是从字节码角度分析 for 循环:

  1. // 从字节码角度来分析:循环控制 for 指令
  2. public class T07_ByteAnalyseFor {
  3. public static void main(String[] args) {
  4. for (int i = 0; i < 10; i++) {
  5. }
  6. }
  7. }

T07_ByteAnalyseFor 字节码:使用javap -v T07_ByteAnalyseFor.class,将java程序对应的字节码如下,并做了执行的注释。

  1. 0: iconst_0 // int型常量值0进栈
  2. 1: istore_1 // 将栈顶int型数值存入第二个局部变量,从0开始计数
  3. 2: iload_1 // 第二个int型局部变量进栈,从0开始计数
  4. 3: bipush 10 // 将一个byte型常量值推送至栈顶
  5. 5: if_icmpge 14 // 比较栈顶两int型数值大小,当结果大于等于0时跳转到14行
  6. 8: iinc 1, 1 // 指定int型变量增加指定值,即自增1
  7. 11: goto 2 // 无条件跳转
  8. 14: return // 当前方法返回void

注意:比较while 和 for 的字节码,会发现它们是一模一样的,殊途也能同归。所以我们编写的while 循环 与 for循环在底层是一样的执行。

 


文章最后,给大家推荐一些受欢迎的技术博客链接:

  1. Hadoop相关技术博客链接
  2. Spark 核心技术链接
  3. JAVA相关的深度技术博客链接
  4. 超全干货--Flink思维导图,花了3周左右编写、校对
  5. 深入JAVA 的JVM核心原理解决线上各种故障【附案例】
  6. 请谈谈你对volatile的理解?--最近小李子与面试官的一场“硬核较量”
  7. 聊聊RPC通信,经常被问到的一道面试题。源码+笔记,包懂

 


欢迎扫描下方的二维码或 搜索 公众号“10点进修”,我们会有更多、且及时的资料推送给您,欢迎多多交流!

                                           

       

注:本文转载自blog.csdn.net的不埋雷的探长的文章"https://blog.csdn.net/weixin_32265569/article/details/107997001"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top