JVM字节码指令
所属分类 jvm
浏览量 847
Java字节码指令就是Java虚拟机能够听得懂、可执行的指令,
可以说是Jvm层面的汇编语言,或者说是Java代码的最小执行单元。
javac命令会将Java源文件编译成字节码文件,即.class文件,其中就包含了大量的字节码指令。
Java虚拟机采用面向操作数栈而不是面向寄存器的架构
所以大多数指令都不包含操作数,只有一个操作码,指令参数都存放在操作数栈中。
字节码指令分类
存储和加载类指令
主要包括load系列指令、store系列指令和ldc、push系列指令,
主要用于在局部变量表、操作数栈和常量池三者之间进行数据调度;
对象操作指令(创建与读写访问)
putfield和getfield就属于读写访问的指令
此外还有putstatic/getstatic,还有new系列指令,以及instanceof等指令
操作数栈管理指令
如pop和dup,他们只对操作数栈进行操作。
类型转换指令和运算指令
如add/div/l2i等系列指令,实际上这类指令一般也只对操作数栈进行操作。
控制跳转指令
这类里包含常用的if系列指令以及goto类指令。
方法调用和返回指令
主要包括invoke系列指令和return系列指令。
这类指令也意味这一个方法空间的开辟和结束
即invoke会唤醒一个新的java方法(新的栈和局部变量表),而return则意味着这个宇宙的结束回收。
公有设计,私有实现
虚拟机实现的方式主要有以下两种:
将输入的Java虚拟机代码在加载时或执行时翻译成另一种虚拟机的指令集
将输入的Java虚拟机代码在加载时或执行时翻译成宿主机处理程序的本地指令集(即即时编译器代码生成技术)。
精确定义的虚拟机行为和目标文件格式,
不应当对虚拟机实现者的创造性产生太多的限制,
Java虚拟机是被设计成可以允许有众多不同的实现,
并且各种实现可以在保持兼容性的同时提供不同的新的、有趣的解决方案。
class文件的变化
Class文件格式所具备的平台中立(不依赖于特定硬件及操作系统)、紧凑、稳定和可扩展的特点,
是Java技术体系实现平台无关、语言无关两项特性的重要支柱。
Class文件是Java虚拟机执行引擎的数据入口,也是Java技术体系的基础支柱之一。
上一篇
下一篇
三分钟学会杜邦分析
ROE简介
java class类文件结构
JVM类加载过程
JVM类加载器
修佛必读《心经》《金刚经》《楞严经》