刚写了个编文章说int i=i++的问题,之后想是iinc指令直接操作本地变量表草成的么,随之用long做了一下实验,看代码和编译后的指令,

public static void iAdd(long i) {i = i++;System.out.println(i);}

变异后的code的第1行的意思是复制栈顶一个(long、double型的)或两个(其它类型的)数值,并且复制值进栈,一直到第2行代码之后,这时候的栈是什么样子的呢?见下图

1
1
1

第三行ladd指令,栈顶两个元素出栈,相加之后入栈

 
2
1

紧接着连续两个lstore指令,将栈顶元素存储到相应的本地变量表,弹出2之后本地变量i=2,弹出1之后本地变量i=1;

后面的指令是输出语句的编译之后的指令,只做简单分析,6行获取常量池#3指示的静态域压入栈顶,9行加载本地变量表0出的变量到栈顶;

10行栈顶两个元素出栈,调用#4 字符产量指定的函数。最后一行return。

一些个人看法:

i=i++;之所以会出现 执行完不变的情况,是因为:先用再加,按说先用i=i,再加i++;也不会出现不变的情况,应该是,先用,并不是真正的先用,而是在栈中暂时存储,并没有真正给本地变量表的变量赋值,知道i++结束之后,才将之前放入战中的值弹出赋值。

这是i是long的情况下,去掉i=,之后编译后代码,发现少了一个dup2和lstore,也就是少了先用的入栈,和最后的出栈赋值。

另外安利一个比较不错的文章,里面对变异后的指令均做了介绍,帮助甚大。

JVM指令集(指令码、助记符、功能描述) --- 逐渐更新 --- 2011-08-23

(最后又想起来一点,为什么栈的大小是3,因为所有的出栈入栈操作,栈大小为3即可满足所有的入栈出栈操作,最大时为3)

从字节码指令分析i=i++(i是long类型时)相关推荐

  1. 操作数栈的字节码指令执行分析

    一:写个demo 二:点击Recompile编译 三:使用javap命令反编译class文件        javap -v 类名.class 四:查看结果 五:分析执行过程 首先bipush意思是把 ...

  2. 你还在为怎么查看字节码指令而担忧吗?

    来自:烟雨星空 前言 我们平时编码过程中,可能很少去查看 Java 文件编译后的字节码指令.但是,不管你是因为对技术非常热爱,喜欢刨根问底,还是想在别人面前装X .我认为,都非常有必要了解一下常见的字 ...

  3. 【Java 虚拟机原理】Class 字节码二进制文件分析 六 ( 属性类型 | Code 属性 | 属性名称索引 | 属性长度 | 操作数栈最大深度 | 局部变量存储空间 | 字节码长度 )

    文章目录 前言 一.属性类型 二.Code 属性表数据结构 三.属性名称索引 四.属性长度 五.操作数栈最大深度 六.局部变量存储空间 七.字节码长度 八.存储字节码指令的一系列字节流 前言 上一篇博 ...

  4. java异常 字节码,Java字节码角度分析异常处理

    目录 从字节码角度来分析:异常处理 1.1 异常-catch // 从字节码角度来分析:异常处理 public class T13_ByteAnalyseException { public stat ...

  5. java字节码指令简介(仅了解)

    [0]README 0.1)本文全文转自 "深入理解jvm", 旨在了解 java字节码指令 的基础知识: [1]写在前面 1)由于jvm 采用面向操作数栈而不是寄存器的结构,所以 ...

  6. JVM004_字节码指令简介

    字节码指令简介 Java虚拟机指令由操作码(Opcode)和跟随其后的零至多个操作数(Operand)组成. 操作码:一个字节长度的,代表某种特定操作含义的数字. 操作数:操作码需要的参数. 字节码与 ...

  7. Class文件结构amp;字节码指令

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_36367789/article/details/81605625 class文件结构 无符号数 ...

  8. JVM学习-字节码指令

    目录 1.入门 2 javap 工具 3 图解方法执行流程 3.1.原始 java 代码 3.2.编译后的字节码文件 3.3.常量池载入运行时常量池 3.4.方法字节码载入方法区 3.5.main 线 ...

  9. Java字节码角度分析多态原理 ——提升硬实力8

    在前面的文章中,有详细地介绍java字节码相关的知识,有兴趣的可以提前了解一下. 1.Java字节码的一段旅行经历--提升硬实力1 2.Java字节码角度分析a++ --提升硬实力2 3.Java字节 ...

最新文章

  1. php 两个数组求交集_如何求两个数组的交集
  2. 使用tensorflow实现全连接神经网络的简单示例,含源码
  3. Vivado不同版本打开IP核锁定的解决办法
  4. Ardino基础教程 7_蜂鸣器发声实验
  5. 实例构造器和类(引用类型)
  6. java 获取键盘输入法_Java中接收键盘输入的三种方法
  7. 手机modem开发(1)---MTK modem开发
  8. 视频版ImageNet?快手搞了一场用户兴趣建模大赛 | 附前三名干货
  9. java静态类是只有一个吗,一个只有“私有最终静态”变量的java类。这是一个好主意吗?...
  10. MatConvNet中关于vl_simplenn_display的一些分析
  11. 简单电脑***《菜鸟级》
  12. 服务器开机显示密码过期,Windows server提示密码过期 更改密码使用期限方法
  13. python中pip下载过慢问题
  14. win10系统pyCharm安装及最新2018激活码
  15. 10被动语态,双重所有格
  16. 支持向量机的特点,优点缺点
  17. 云计算的三种服务模式的讲解
  18. GPS警用车辆3G视频监控系统方案
  19. 在线教育:直播视频有哪些运营方式呢?
  20. 牛客第一场 H XOR —— 线性基

热门文章

  1. H264/HEVC 常用缩写词及其含义
  2. L1-040 最佳情侣身高差 (10 分)java
  3. 和ZLTT一起学pwn 2.ret2text
  4. Matlab 将计算结果制作成 gif 动画
  5. 【Tableau 图表大全1.0】之条形图
  6. Python数据分析师薪资大赏(内附学习资料)
  7. 调试大普RTC芯片驱动-ins5699s
  8. R 数字 字符 向量
  9. TFLearn初探之Activation与Dropout
  10. linux查看vm_type,【心得,备忘录】查看vmlinux的符号信息