通过字节码分析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了

相关文章
|
3月前
|
Java 索引
【JVM】字节码文件的组成部分
【JVM】字节码文件的组成部分
37 1
|
3月前
|
存储 Arthas Java
【JVM系列笔记】字节码
本文介绍了Java虚拟机(JVM)的组成,包括类加载子系统、运行时数据区、执行引擎和本地接口。字节码文件由基础信息(如魔数和版本号)、常量池、字段、方法和属性组成。常量池用于存储字符串等共享信息,方法区则包含字节码指令。执行引擎包含解释器、即时编译器和垃圾回收器,负责字节码的解释和优化。文章还提到了字节码工具,如javap、jclasslib和Arthas,用于查看和分析字节码。
59 0
【JVM系列笔记】字节码
|
10月前
|
XML 设计模式 JavaScript
JVM第三讲:JVM 基础-字节码的增强技术详解
JVM第三讲:JVM 基础-字节码的增强技术详解
135 0
JVM第三讲:JVM 基础-字节码的增强技术详解
|
存储 监控 NoSQL
DynamicEntity - 字节码生成实践
在 MVC、MVVM 等分层架构中,一般是让 Model/ Entity 类尽量纯净,只有属性和一堆的 setter/getter 方法,但是在复杂的需求场景下,我们又经常会使得它变得不那么纯净。
76 0
|
存储 Java 数据库连接
动态字节码
在Java中其字节码以二进制的形式存储在class文件中,每一个class文件都包含一个java类或接口,我们可以通过一些动态字节码技术去实现动态创建类、添加类的属性和方法、设置类的父类,以及修改类的方法等操作。常用的动态字节码类库有Javassist、ASM等。而Javassist相比ASM其不需要接触JVM底层的指令,只需要使用Javassist提供API接口就可以实现动态字节码编程,Mybatis动态是实现Dao接口底层也是使用到了Javassist技术,所以这篇文章主要介绍一下Javassist的使用。
111 0
|
存储 人工智能 Java
一起来学字节码插桩:从分析class文件结构开始
`Java` 能做到 `一次编译,到处运行`,主要就是靠 `class字节码` 文件,也就是 `java` 文件经过编译之后 `.java -> .class`,然后再被` JVM` 虚拟机加载。其实,不仅是 `java` 语言,只要是符合规则的 `class` 字节码文件,都可以被 `JVM` 加载
126 0
|
Java 编译器
字节码文件
字节码文件
135 0
|
存储 监控 前端开发
JVM字节码文件概述
字节码文件概述
118 0
JVM字节码文件概述
|
存储 Java 编译器
JVM 字节码解析过程
JVM 字节码解析过程
JVM 字节码解析过程
|
存储 Java 索引
JVM 字节码指令解析(上)
概述本文主要是基于 .class 文件,进行分析 .class 文件的内容。 这部分个人觉得主要是属于设计机构拓展的内容,大家可以一起来学习一下 Java 字节码的设计结构以及感受一下设计者的设计。
210 0
JVM 字节码指令解析(上)