JVM学习笔记——字节码指令
JVM学习笔记——字节码指令
字节码
0与 1是计算机仅能识别的信号,经过0和1的不同组合产生了数字之上的操作。另外,通过不同的组合亦产生了各种字符。同样,可以通过不同的组合产生不同的机器指令。在不同的时代,不同的厂商,机器指令组成的集合是不同的。但毕竟CPU是底层基础硬件,指令集通常以扩展兼容的方式向前不断演进。而机器码是离CPU指令集最近的编码,是CPU可以直接解读的指令,因此机器码肯定是与底层硬件系统耦合的。
问题:如果某个程序员因为不同的硬件平台需要编写多套代码,这是十分令人崩溃的。Java的使命就是一次编写、到处执行。在不同的操作系统、不同硬件平台上,均可以不用修改代码即可顺畅地执行。
如何实现JAVA跨平台?
计算机工程领域的任何问题都可以通过增加一个中间层来解决。因此,中间码应运而生,即"字节码"(Bytecode)。Java所有的指令有200个左右,一个字节(8位)可以存储256种不同的指令信息,一个这样的字节称为字节码(Bytecode)。在代码的执行过程中,JVM将字节码解释执行,屏蔽对底层操作系统的依赖;JVM也可以将字节码编译执行,如果是热点代码,会通过JIT动态地编译为机器码,提高执行效率。
字节码指令
为了方便记忆,JVM在字节码上也和汇编语言改进机器语言借助助记符来高效记忆的方法一样,设计了一套操作码助记符,使用特殊单词来标记这些数字。如ICONST_0代表00000011,即十六进制数为0x03等
字节码主要指令如下:
1.加载或存储指令
在某个栈帧中,通过指令操作数据在虚拟机栈帧的局部变量表与操作栈之间来回传输,常见指令如下:
1)将局部变量加载到操作栈中。如ILOAD(将int类型的局部变量压入栈)和ALOAD(将对象引用的局部变量压入栈)等。
2)从操作栈顶存储到局部变量表。如ISTORE、ASTORE等。
3)将常量加载到操作栈顶,这是极为高频使用的指令。如ICONST、BIPUSH、SIPUSH、LDC等。
* ICONST 加载的是-1~5的数(ICONST与BIPUSH的加载界限)。
* BIPUSH,即Byte ImmdiatePUSH,记载-128~-127之间的数。
* SIPUSH,即Short Immediate PUSH,加载-32768~32767
* LDC,即Load Constant,在-2147483618~2147483647或者字符串时,JVM采用LDC指令压入栈中。
2. 运算指令
对两个操作栈帧上的值进行运算,并把结果写入操作栈顶,如IADD、IMUL等。
3. 类型转换指令
显示转换两种不同的数值类型。如I2L、D2F等。
4.对象创建与访问指令
根据类进行对象的创建、初始化、方法调用相关指令,常见指令如下:
1)创建对象指令。如NEW、NEWARRAY等。
2)访问属性指令。如GETFIELD、PUTFIELD、GETSTATIC等。
3)检查实力类型指令。如INSTANCEOF、CHECKCAST等。
5.操作栈管理指令
JVM提供了直接控制操作栈的指令,常见指令如下:
1)出栈操作。如POP即一个元素,POP2即两个元素。
2)复制栈顶元素并压入栈。如DUP。
6. 方法调用与返回指令
常见指令如下:
1)INVOKEVIRTUAL指令:调用对象的实例化方法。
2)INVOKESPECIAL指令:调用实例初始化方法、私有方法、父类方法等。
3)INVOKESTATIC指令:调用静态类方法。
4)RETURN指令:返回VOID类型。
7.同步指令
JVM使用方法结构中的ACC_SYNCHRONIZED标志同步方法,指令集中有MONITORENTER和MONITOREXIT支持synchronized语义。
参考书籍——《码出高效》 第四章 走进JVM
JVM学习笔记——字节码指令的更多相关文章
- 从jvm字节码指令看i=i++和i=++i的区别
1. 场景的产生 先来看下下面代码展示的两个场景 @Testvoid testIPP() { int i = 0; for (int j = 0; j < 10; j++) { i = i++; ...
- JVM学习笔记——类加载和字节码技术篇
JVM学习笔记--类加载和字节码技术篇 在本系列内容中我们会对JVM做一个系统的学习,本片将会介绍JVM的类加载和字节码技术部分 我们会分为以下几部分进行介绍: 类文件结构 字节码指令 编译期处理 类 ...
- JVM学习笔记:字节码执行引擎
JVM学习笔记:字节码执行引擎 移步大神贴:http://rednaxelafx.iteye.com/blog/492667
- JVM学习第三天(JVM的执行子系统)之字节码指令
早上看了Class类文件结构,晚上继续来看字节码指令,毕竟谁也不是一步登天的(说白了还是穷); 字节码指令 Java虚拟机的指令由一个字节长度的.代表着某种特定操作含义的数字(称为操作码,Opcode ...
- JVM 字节码指令手册 - 查看 Java 字节码
JVM 字节码指令手册 - 查看 Java 字节码 jdk 进行的编译生成的 .class 是 16 进制数据文件,不利于学习分析.通过下命令 javap -c Demo.class > Dem ...
- [四] java虚拟机JVM编译器编译代码简介 字节码指令实例 代码到底编译成了什么形式
前言简介 前文已经对虚拟机进行过了简单的介绍,并且也对class文件结构,以及字节码指令进行了详尽的说明 想要了解JVM的运行机制,以及如何优化你的代码,你还需要了解一下,java编译器到底是 ...
- JVM总括三-字节码、字节码指令、JIT编译执行
JVM总括三-字节码.字节码指令.JIT编译执行 目录:JVM总括:目录 java文件编译后的class文件,java跨平台的中间层,JVM通过对字节码的解释执行(执行模式,还有JIT编译执行,下面讲 ...
- jvm理论-字节码指令
Java虚拟机的指令由一个字节长度的.代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成. 基本数据类型 1.除了l ...
- 深入了解java虚拟机(JVM) 第十章 字节码指令
一.字节码指令的含义 Java字节码指令由一个字节长度的,代表某种特定操作含义的数字(操作码)以及其后的零至多个代表此操作所需参数(操作数).此外字节码指令是面向操作数栈的,这里操作数栈在功能上对应实 ...
随机推荐
- 使用oid2name列出数据库和对应的oid
[postgres@postgre base]$ ll total 172 drwx------ 2 postgres postgres 12288 Dec 6 09:21 1 drwx------ ...
- JavaScript Functional Programming:声明式与命令式
函数式编程属于声明式编程(declarative programming)的范畴,经常跟声明式编程一块儿讨论的是命令式编程(imperative programming),因为它们是两种不太一样的风格 ...
- springBoot注解搜集
一.注解(annotations)列表 @SpringBootApplication:包含了@ComponentScan.@Configuration和@EnableAutoConfiguration ...
- python中dir,__dict__ , __setitem__(),__getitem__()
class Testa: pass class Testb(object): pass if __name__ == '__main__': print 'testb = ',dir(Testb) p ...
- HTML5Audio/Video全解(疑难杂症)
1.mp4格式视频无法在chrome中播放 Chrome浏览器支持HTML5,它支持原生播放部分的MP4格式(不用通过Flash等插件).为 什么是部分MP4呢?MP4有非常复杂的含义(见http:/ ...
- 阶段5 3.微服务项目【学成在线】_day07 课程管理实战_01-我的课程-需求分析与PageHelper技术
1 我的课程 1.1需求分析 课程添加完成后可通过我的课程进入课程修改页面,此页面显示我的课程列表,如下图所示,可分页查询. 注意:由于课程图片服务器没有搭建,这里在测试时图片暂时无法显示. 上边的查 ...
- Zabbix4.x 历史数据存储到Elasticsearch7.x
一.简介 Zabbix 3.4.6 版本开始支持历史数据存储到 Elasticsearch, 早就想测试这个功能,最近有个需求需保存 zabbix 的历史数据上达十亿条,因此决定测试这功能的实用性,事 ...
- redis未设置idle超时时间导致连接过多
今天ELK收集日志的时候,发现收集失败,查找各方面原因,最后在redis日志里面发现报错:[2489] 02 Jun 10:43:42 # Error allocating resoures for ...
- canvas梦幻七彩泡泡
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q ...
- 【miscellaneous】视频浓缩摘要简介
视频摘要,就是以自动或者半自动的方式,通过分析视频的结构和内容存在的时空冗余,从原始视频中提取有意义的片段,将它们以某种特点的方式重新组合成紧凑的.能够充分表现视频语义内容的浓缩视频. 一.静态视频摘 ...