通过字节码分析i++ 与 ++i

简介: 通过字节码分析i++ 与 ++i

一 字节码

字节码是java跨平台的利器,无论你写成何种方法,最终java来执行的都是字节码,同时字节码现在也变得越来越被学习者看中,例如多线程,例如解释一些效率的问题。

二 查看字节码

jvm命令:javap -c +执行的class文件

  1. i++的执行
  • 代码

    int a =0;
    int i=0;
    a = i++;

  • 字节码

    4: iload_2
    5: iinc 2, 1
    8: istore_1

  1. ++i的执行
  • 代码

    int a =0;
    int i=0;
    a = ++i;

  • 字节码

    ++i 的字节码执行
    4: iinc 2, 1
    7: iload_2
    8: istore_1

二 字节码执行分析

  1. 解释i++

    先将局部变量表中的第二个抽屉中的数据 放入栈,然后再对局部变量表的第二个抽屉进行+1,最后将栈中的数据放入到局部变量表;结果就是0,而区别就是我们最后读取的是栈中的数据,而+1缺失在局部表量表所以才是0;

  2. 解释++i

    首先iinc是对局部变量表中的数据进行 +1操作。那后面的 数值(2,1)是什么意思呢,先说下局部表量表,这个是jvm虚拟机栈中的一个空间,存储的是参数和局部变量,我们可以理解他为一个中药柜,里面有很多的抽屉,(2,1)就是向第二个抽屉中的数据+1

    然后iload_2 就是将局部变量表中的第二个变量,放入到操作栈中,也就是入栈,这时栈中的数据就是1了,然后执行istore_1就是将栈顶的数据赋值给局部变量,这时局部变量就是1了

相关文章
|
人工智能 小程序 算法
分享64个JavaGame源码总有一个是你想要的
分享64个JavaGame源码总有一个是你想要的
378 0
|
12月前
|
数据采集 存储 数据可视化
Python数据分析:揭秘"黑神话:悟空"Steam用户评论趋势
Python数据分析:揭秘"黑神话:悟空"Steam用户评论趋势
|
SQL NoSQL 关系型数据库
数据库解决方案
【5月更文挑战第12天】数据库解决方案。
305 4
|
设计模式 存储 算法
设计模式——责任链
OA系统的采购审批项目、职责链模式基本介绍、职责链模式解决 OA 系统采购审批项目
设计模式——责任链
|
12月前
|
SQL 运维 Oracle
KDTS迁移视图报错ERROR: syntax error at or near "IF"
KDTS迁移视图报错ERROR: syntax error at or near "IF"
KDTS迁移视图报错ERROR: syntax error at or near "IF"
|
缓存 监控 测试技术
掌握容器化持续集成/持续部署(CI/CD)的最佳实践
【10月更文挑战第8天】本文介绍了容器化持续集成/持续部署(CI/CD)的最佳实践,涵盖容器化CI/CD的概念、优势和实施步骤。通过使用容器技术,可以实现环境一致性、快速迭代和易于扩展,提高软件开发的效率和可靠性。文章还详细讨论了编写高效的Dockerfile、自动化测试、安全性、监控和日志管理等方面的最佳实践。
|
搜索推荐 测试技术 流计算
承上启下:基于全域漏斗分析的主搜深度统一粗排
文章首先介绍了淘宝搜索的多阶段检索系统,包括召回、粗排和精排阶段。粗排模型的目标是优化商品的排序,以提高在召回集合中选择优质商品的能力。文章提到,粗排模型与精排模型的目标有所不同,粗排更注重腰部商品的排序,而精排更注重头部商品的排序。 此外,文章还探讨了模型的损失函数形式,发现原始的softmax损失函数在处理多正样本时存在问题,提出了改进的损失函数,使得模型在粗排阶段的表现更佳。最后,作者们总结了优化工作的进展,以及优化样本对齐,以实现更好的整体效果。
搭建esp32-idf开发环境并烧入第一个程序
搭建esp32-idf开发环境并烧入第一个程序
755 0
|
JSON DataWorks 监控
DataWorks报错问题之连接doris报错如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。