常见的常量入栈的操作码有 const push idc
1,const i l f d a分别表示 int long float double 对象引用
如:
- aconst_null 将null对象引用压入栈
- iconst_m1 将int类型-1压入栈
- iconst_1 将int类型的1压入栈
- lconst_3 将long类型的3压入栈
2,push
- bipush 8位带符号的整数压入栈
- sipush 16位带符号的整数压入栈
3,idc 将常量池中的项压入栈
局部变量中的装载值指令 load
格式和const差不多,如iload_1 表示从局部变量1中装载int类型值,对于从数组中装载则由两位字母+load表示 如:
- aaload表示从数组中装载引用类型
- iaload表示从数组中装载int类型
值存入局部变量指令 store
格式同上 如:
- aastore表示将引用类型值存入数组
- istore_0表示将int类型值存入局部变量0
通用指令
- popn 弹出栈顶n个字长的内容(n为1时省略)
- dupn 复制栈顶n个字长的内容(n为1时省略)
- dupn_xm 复制栈顶n个字长的内容,然后将复制的内容及原来弹出的n+m个字长压入栈 如:
- dup_x2表示复制栈顶1个字长的内容,然后将复制的内容及原来弹出的3个字长压入栈
- swap 交换栈顶两个字长的内容
类型转换指令
运算指令
- add表示加 。。。。 rem取余 neg取反
- iinc 将常量值加入到int中
- sh 移位操作
对象操作指令
- new 创建一个新对象
- checkcast 检查类型
- getfield 从对象中获取字段
- putfield 设置对象中字段的值
- getstatic 获取类中的静态字段
- putstatic 设置类中静态字段的值
- instanceof 判断类型匹配
方法调用及返回指令
- invokevirtual 根据运行时对像类型调用方法
- invokespecial 根据编译时的类型调用实例方法以及编译源码生成的init方法
- invokestatic 调用静态方法
- invokeinterface 调用接口方法
- return 返回指令 ireturn返回int return 返回void
分享到:
相关推荐
JVM 的指令集采用了固定长度的格式,每条指令都是由一个操作码(Opcode)和零个或多个操作数组成。这种设计使得指令集既简单又易于扩展。 例如,“iload”表示加载整数到操作数栈,“anewarray”用于创建数组对象,...
- **程序计数器**:每个线程都有一个独立的计数器,记录当前线程正在执行的字节码指令地址。 - **虚拟机栈**:每个方法调用对应一个栈帧,存储局部变量、操作数栈等信息。 - **本地方法栈**:与虚拟机栈类似,但...
- **类文件解析**:JVM将类文件中的字节码转换成计算机能够理解的指令执行。 #### 10. 常用工具 - **VisualVM**:是一个可以监控运行时的Java应用程序和环境的工具。 - **Memory Analyzer**:用于分析Java堆转储的...
JVM的设计目的是为了使Java程序能够跨平台运行——也就是说,只要目标操作系统上安装了相应的JVM,Java程序就可以在该平台上运行。 JVM的主要优点在于它的可移植性。通过在不同的平台上实现JVM,开发者只需要编写一...
- **优点**:解决了JVM无法直接操作底层代码的问题,提高了代码执行效率。 - **特点**:与Java虚拟机栈一样,每个线程拥有独立的本地方法栈。 #### 五、Java堆 Java堆是Java虚拟机所管理的内存中最大的一块,它是...
它提供了一种跨平台的执行环境,使得Java程序无需重新编译就能在任何安装了JVM的操作系统上运行。 #### 2. 编程语言与编译优化书单 - **《The Garbage Collection Handbook》**: 本书深入探讨了垃圾收集的理论与...
- **基于栈的编译器**:Java使用基于栈的编译器,这意味着编译后的字节码指令操作的是栈顶元素。这种设计有利于提高编译效率和执行速度。 - **编译+解释混合执行**:Java采用了编译加解释的混合执行模式。JIT编译器...
JVM提供了多种垃圾收集器,如Serial、Parallel、CMS、G1等,针对不同代的内存使用不同的算法,例如新生代常用的复制算法,老年代的标记-整理算法等。 #### 三、Java代码的编译与执行过程 Java代码的编译和执行过程...
3. **栈内存(Stack)**:每个线程都有一个私有的栈,用于存储局部变量和操作数栈。 4. **程序计数器(Program Counter Register)**:当前线程所执行的字节码指令地址。 5. **本地方法栈(Native Method Stack)**:类似...
JVM指令手册提供的信息是关于如何操作Java字节码,尤其是在栈和局部变量表上的操作。以下是一些重要的JVM指令,它们涉及栈操作和局部变量的加载与存储。 ### 栈和局部变量操作指令 #### 将常量压入栈的指令 - `a...
mini-jvm首先需要解析字节码文件,识别其中的类信息、方法信息和操作码。例如,`aload_0`指令代表从局部变量表的第一个位置加载对象引用,`invokevirtual`则用于调用实例方法。mini-jvm需要解析这些字节码指令,并...
- 字节码执行引擎:解析和执行字节码的过程,如操作数栈、本地变量表等。 2. **垃圾收集与内存管理**: - 垃圾收集算法:如标记-清除、复制、标记-整理、分代收集等,以及它们的优缺点。 - 内存分配与回收策略:...
#### 三、常用GC算法 1. **引用计数法** - 该方法通过为每个对象添加一个引用计数器来追踪引用的数量。 - 缺点是每次对象赋值都需要更新引用计数器,并且难以处理循环引用的情况。 - 例如,微软的COM、...
- CMS(Concurrent Mark Sweep)和G1 GC是现代JVM中常用的并发垃圾收集器,它们在减少停顿时间方面表现出色。 6. JVM的Class Loader和Execution Engine - 类加载器负责加载、验证、准备和初始化类文件,确保正确...
### JVM(Java虚拟机)详解:Java语言中所用的常用术语解释 #### 一、Java虚拟机(JVM)概述 Java虚拟机(JVM)是Java语言的核心组件之一,它为Java程序提供了一个运行时环境。JVM的概念是Java语言跨平台能力的关键,...
JVM是运行Java字节码的抽象计算机,其性能优化对于提高Java应用程序的执行效率至关重要。下面我们来详细探讨一下JVM优化相关的知识点。 首先,JVM优化的目的是为了使Java应用程序能够更快、更高效地运行,并在保证...
- **类装载器(Class Loader)**:负责加载字节码文件(.class)到JVM内存。 - **运行时数据区(Runtime Data Areas)**:包括方法区、堆、虚拟机栈、本地方法栈和程序计数器。 - **执行引擎(Execution Engine)...