通过字节码分析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源码总有一个是你想要的
405 0
|
数据采集 存储 数据可视化
Python数据分析:揭秘"黑神话:悟空"Steam用户评论趋势
Python数据分析:揭秘"黑神话:悟空"Steam用户评论趋势
|
SQL NoSQL 关系型数据库
数据库解决方案
【5月更文挑战第12天】数据库解决方案。
319 4
|
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"
ArcGIS:如何进行离散点数据插值分析(IDW)、栅格数据的重分类、栅格计算器的简单使用、缓冲区分析、掩膜?
ArcGIS:如何进行离散点数据插值分析(IDW)、栅格数据的重分类、栅格计算器的简单使用、缓冲区分析、掩膜?
999 0
|
搜索推荐 测试技术 流计算
承上启下:基于全域漏斗分析的主搜深度统一粗排
文章首先介绍了淘宝搜索的多阶段检索系统,包括召回、粗排和精排阶段。粗排模型的目标是优化商品的排序,以提高在召回集合中选择优质商品的能力。文章提到,粗排模型与精排模型的目标有所不同,粗排更注重腰部商品的排序,而精排更注重头部商品的排序。 此外,文章还探讨了模型的损失函数形式,发现原始的softmax损失函数在处理多正样本时存在问题,提出了改进的损失函数,使得模型在粗排阶段的表现更佳。最后,作者们总结了优化工作的进展,以及优化样本对齐,以实现更好的整体效果。
|
uml
UML 交互图(序列图 协同图)
UML 交互图(序列图 协同图)
224 0
|
数据可视化 Java 关系型数据库
【SQLite预习课2】SQLite 和 HeidiSQL 的安装
【SQLite预习课2】SQLite 和 HeidiSQL 的安装
564 0
|
前端开发 JavaScript
Webpack打包流程
Webpack 是一款非常流行的打包工具,它的主要作用是将项目中的各个模块打包成静态资源,以便于在浏览器中加载和运行。Webpack 的打包流程可以分为以下几个步骤: