从JVM的角度看JAVA代码1
从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相关推荐
- 从JVM的角度看JAVA代码--代码优化
从JVM的角度看JAVA代码–代码优化 从JVM的角度看JAVA代码代码优化 片段一重复计算 片段二重复比较 在JVM加载优化为class文件,运行class文件时,会有JIT(Just-In-Tim ...
- jvm面试2 jvm如何加载java代码? JVM知识重点:内存模型和GC
jvm如何加载java代码? native方法forName0 JVM知识重点:内存模型和GC' 注意:jvm是一个内存中的虚拟机 下面是Class类中,我们常用的forName方法 @CallerS ...
- 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 ...
- 徐无忌深入JVM虚拟机笔记:Java代码到底是如何运行起来的?
徐无忌深入JVM虚拟机笔记:Java代码到底是如何运行起来的? 完成:第一遍 1.Java代码到底是如何运行起来的? Demo.java编写的源文件 打包成:Jar包即Demo.class 通过Jav ...
- 编辑从字节码和 JVM 的角度解析 Java 核心类 String 的不可变特性
1. 前言 最近看到几个有趣的关于Java核心类String的问题. String类是如何实现其不可变的特性的,设计成不可变的好处在哪里. 为什么不推荐使用+号的方式去形成新的字符串,推荐使用Stri ...
- java测试类和类_【测试开发】从测试角度看Java异常类(错误和异常区别介绍)
在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出).Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性. Throwable 有两个重 ...
- 从成本角度看Java微服务
近年来,微服务因其良好的灵活性和伸缩性等特点备受追捧,很多公司开始采用微服务架构或将已有的单体系统改造成微服务.IBM也于近日开源了轻量级Java微服务应用服务器Open Liberty.但是采用Ja ...
- 另一个角度看Java常量池
Java程序猿都知道常量池,字符串会缓存,小于128的Int也会缓存.那你知道下面几种情况的输出结果吗? String str = "127";Integer int1 = Int ...
- 从一个资深面试官角度看Java面试:面试了20家大厂与面试了上百人之后,发现这样介绍项目经验,显得项目很牛逼!
文章目录 前言 怎么介绍项目 怎么介绍项目难点与亮点 你负责的模块 如何进行自我介绍 如何进行自我介绍 你有什么优劣势 你有什么优劣势 你为什么选择我们公司 怎么让面试官满意 前言 前段时间和一个少有 ...
最新文章
- 深度学习3:手动实现L2正则化(L2 Regularization)
- js中变量和jsp中java代码中变量互相访问解决方案
- java word表格_Java 添加Word表格行或列
- react源码解析之stack reconciler
- 王立众:学习多媒体开发从编解码开始
- asp.net 返回上一页的实现方法小集
- lvs服务器需要开启web服务么_Centos7搭建LVS+Keepalived高可用Web
- Spring中的动态代理
- 产品经理高质量产物的五步思维法
- 955.WLB 不加班公司名单,2022年最新版!新增5家公司
- 【推荐】一个移动开发的网站
- JSONP原理及实现
- 康奈尔笔记法(5R笔记法)
- FigDraw 1. SCI 文章的灵魂 之 简约优雅的图表配色
- 最有效地戒掉晚睡强迫症(熬夜强迫症、假象失眠症等等)
- Python拉勾网爬虫实现
- 四、Sails项目的Api文档——集成Swagger解决方案
- android 内存分析工具ASAN 学习
- python模块总结_Python常用模块资料总结和归纳
- 决策树之C4.5实现(离散属性与连续,属性并存)
热门文章
- Android udp json+数组 ---gt;bytes发送数据
- 怎么不保存退出、保存退出vim、vi编辑
- 【Nginx那些事】nginx 安装及常用指令
- element 组件中 el-form-item label= ‘vue介绍 (vue设置)‘ 强制换行
- C#LeetCode刷题之#100-相同的树(Same Tree)
- keras构建卷积神经网络_通过此简单教程学习在网络上构建卷积神经网络
- 自制口袋妖怪_承诺和口袋妖怪-我如何学会异步思考
- 狂神说Java学习笔记 Java基础
- 尚学堂java 答案解析 第四章
- 2020年编程现状:Python将成为第一大编程语言,中国开源涨势最猛