从JVM的角度看JAVA代码1

从JVM指令的角度来分析++,--问题可以分析的非常透彻,这里给出两个案例。通过这两个案例就能知道JAVA中前++和后++的原理了,同时也可以推论出--的情况。

public class JavaSampleAppend {public static void main(String []args) {int i = 1;i = (i++) + (++i);System.out.println(i);}
}/*0:   iconst_1        // 将int类型的常量值1推送到栈顶 11:   istore_1      // 将栈顶抛出的数据赋值给第2个slot所在的int类型的本地变量中 12:   iload_1       // 将第2个slot所在的int类型本地变量推送到栈顶 13:   iinc    1, 1 // 将第2个slot所在的int类型的本地变量自加一 26:   iinc    1, 1 // 将第2个slot所在的int类型的本地变量自加一  39:   iload_1       // 将第2个slot所在的int类型本地变量推送到栈顶 310:  iadd         // 将栈顶变量和第二个变量相加,然后将结果放回栈顶 411:  istore_1        // 将栈顶抛出的数据赋值给第2个slot所在的int类型的本地变量中 4// 也就是说输出为412:  getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;15:  iload_116:  invokevirtual   #3; //Method java/io/PrintStream.println:(I)V19:  return
*/
public class JavaSampleAppend {public static void main(String []args) {int i = 1;i = (i++) + (++i) + (i++);System.out.println(i);}
}
/*
0:   iconst_1       // 将int类型的常量值1推送到栈顶 1
1:   istore_1       // 将栈顶抛出的数据赋值给第2个slot所在的int类型的本地变量中 1
2:   iload_1        // 将第2个slot所在的int类型本地变量推送到栈顶 1
3:   iinc    1, 1   // 将第2个slot所在的int类型的本地变量自加一 2
6:   iinc    1, 1   // 将第2个slot所在的int类型的本地变量自加一 3
9:   iload_1        // 将第2个slot所在的int类型本地变量推送到栈顶 3
10:  iadd           // 将栈顶变量和第二个变量相加,然后将结果放回栈顶 4
11:  iload_1        // 将第2个slot所在的int类型本地变量推送到栈顶 3
12:  iinc    1, 1   // 将第2个slot所在的int类型的本地变量自加一 4
15:  iadd           // 将栈顶变量和第二个变量相加,然后将结果放回栈顶 7
16:  istore_1       // 将栈顶抛出的数据赋值给第2个slot所在的int类型的本地变量中 7// 也就是说输出为7
17:  getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;
20:  iload_1
21:  invokevirtual   #3; //Method java/io/PrintStream.println:(I)V
24:  return
*/

从JVM的角度看JAVA代码1相关推荐

  1. 从JVM的角度看JAVA代码--代码优化

    从JVM的角度看JAVA代码–代码优化 从JVM的角度看JAVA代码代码优化 片段一重复计算 片段二重复比较 在JVM加载优化为class文件,运行class文件时,会有JIT(Just-In-Tim ...

  2. jvm面试2 jvm如何加载java代码? JVM知识重点:内存模型和GC

    jvm如何加载java代码? native方法forName0 JVM知识重点:内存模型和GC' 注意:jvm是一个内存中的虚拟机 下面是Class类中,我们常用的forName方法 @CallerS ...

  3. Java生产环境下性能监控与调优详解 第8章 JVM字节码与Java代码层调优

    第8章 JVM字节码与Java代码层调优 8-1 jvm字节码指令-1 8-2 jvm字节码指令-2 8-3 i++与++i 8-4 字符串+拼接 8-5 Try-Finally字节码 8-6 Str ...

  4. 徐无忌深入JVM虚拟机笔记:Java代码到底是如何运行起来的?

    徐无忌深入JVM虚拟机笔记:Java代码到底是如何运行起来的? 完成:第一遍 1.Java代码到底是如何运行起来的? Demo.java编写的源文件 打包成:Jar包即Demo.class 通过Jav ...

  5. 编辑从字节码和 JVM 的角度解析 Java 核心类 String 的不可变特性

    1. 前言 最近看到几个有趣的关于Java核心类String的问题. String类是如何实现其不可变的特性的,设计成不可变的好处在哪里. 为什么不推荐使用+号的方式去形成新的字符串,推荐使用Stri ...

  6. java测试类和类_【测试开发】从测试角度看Java异常类(错误和异常区别介绍)

    在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出).Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性. Throwable 有两个重 ...

  7. 从成本角度看Java微服务

    近年来,微服务因其良好的灵活性和伸缩性等特点备受追捧,很多公司开始采用微服务架构或将已有的单体系统改造成微服务.IBM也于近日开源了轻量级Java微服务应用服务器Open Liberty.但是采用Ja ...

  8. 另一个角度看Java常量池

    Java程序猿都知道常量池,字符串会缓存,小于128的Int也会缓存.那你知道下面几种情况的输出结果吗? String str = "127";Integer int1 = Int ...

  9. 从一个资深面试官角度看Java面试:面试了20家大厂与面试了上百人之后,发现这样介绍项目经验,显得项目很牛逼!

    文章目录 前言 怎么介绍项目 怎么介绍项目难点与亮点 你负责的模块 如何进行自我介绍 如何进行自我介绍 你有什么优劣势 你有什么优劣势 你为什么选择我们公司 怎么让面试官满意 前言 前段时间和一个少有 ...

最新文章

  1. 深度学习3:手动实现L2正则化(L2 Regularization)
  2. js中变量和jsp中java代码中变量互相访问解决方案
  3. java word表格_Java 添加Word表格行或列
  4. react源码解析之stack reconciler
  5. 王立众:学习多媒体开发从编解码开始
  6. asp.net 返回上一页的实现方法小集
  7. lvs服务器需要开启web服务么_Centos7搭建LVS+Keepalived高可用Web
  8. Spring中的动态代理
  9. 产品经理高质量产物的五步思维法
  10. 955.WLB 不加班公司名单,2022年最新版!新增5家公司
  11. 【推荐】一个移动开发的网站
  12. JSONP原理及实现
  13. 康奈尔笔记法(5R笔记法)
  14. FigDraw 1. SCI 文章的灵魂 之 简约优雅的图表配色
  15. 最有效地戒掉晚睡强迫症(熬夜强迫症、假象失眠症等等)
  16. Python拉勾网爬虫实现
  17. 四、Sails项目的Api文档——集成Swagger解决方案
  18. android 内存分析工具ASAN 学习
  19. python模块总结_Python常用模块资料总结和归纳
  20. 决策树之C4.5实现(离散属性与连续,属性并存)

热门文章

  1. Android udp json+数组 ---gt;bytes发送数据
  2. 怎么不保存退出、保存退出vim、vi编辑
  3. 【Nginx那些事】nginx 安装及常用指令
  4. element 组件中 el-form-item label= ‘vue介绍 (vue设置)‘ 强制换行
  5. C#LeetCode刷题之#100-相同的树(Same Tree)
  6. keras构建卷积神经网络_通过此简单教程学习在网络上构建卷积神经网络
  7. 自制口袋妖怪_承诺和口袋妖怪-我如何学会异步思考
  8. 狂神说Java学习笔记 Java基础
  9. 尚学堂java 答案解析 第四章
  10. 2020年编程现状:Python将成为第一大编程语言,中国开源涨势最猛