概述
Java虚拟机指令由一个字节的操作码或操作数组成。大部分指令都没有支持byte、short、char和boolean的类型。编译器会在编译期或运行期转换为带符号扩展的int类型处理。
指令类型
加载和存储指令
加载和存储指令用于将数据在栈帧中的局部变量表和操作数栈之间来回传数据。
以下指令t代表i、l、f、d、a,n代表局部变量表的slot位置。
- 将一个局部变量加载到操作栈:tload_.
- 将一个数值从操作数栈存储到局部变量表:tstor_.
- 将一个常量加载到操作数栈:bipush、sipush等
- 扩充局部变量表的访问索引的指令:wide
运算指令
用于对两个操作数栈上的值进行运算,并把结果重新存入到操作帧顶。
- 加法指令:iadd
- 减法指令:isub
- 求余指令:irem
- 取反指令:ineg
- 局部变量自增指令:iinc
- 比较指令:dcmpg
…
类型转换指令
用于两种类型数据显示转换。包括i2b、i2c 、l2i、 f2i、d2i等
对象创建与访问指令
- 创建类实例:new
- 创建数组:newarray
- 访问字段:getfield、setfield、getstatic、putstatic
- 把一个数组元素加载到操作数栈指令:iaload
- 把一个操作数栈的值存储到数组元素的指令:iastore
…
操作数栈管理指令
- 将操作数栈的栈顶一个或两个元素出栈:pop、pop2
- 复制栈顶一个或两个数值并将复制值或双份的复制值重新压入栈顶:dup、dup2
- 将栈顶的两个数值互换:swap
控制转移指令
- 条件分支:ifeq、ifnull …
- 复合条件分支:tableswitch、lookupswitch
- 无条件分支:goto、ret
方法调用和返回指令
- 调用对象实例方法:invokevirtual
- 调用接口方法:invokeinterface
- 调用特殊方法,包括构造器、私有方法和父类方法:invokespecial
- 调用类方法:invokestatic
异常处理指令
athrow
同步指令
虚拟机用monitorenter和monitorexit两条指令支持Synchronized关键字语义。
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
### Java字节码指令列表详解 #### 概述 Java字节码是Java虚拟机(JVM)执行的一种中间代码格式。它由Java编译器生成,并被设计为与平台无关,可在任何支持JVM的平台上运行。Java字节码指令集定义了一系列指令,用于...
在实际分析Java字节码时,可以利用javap工具查看生成的字节码指令,例如以Main.class文件为例,会看到一系列的数字和字符组合。它们按照一定的格式描述了Java程序在执行时所需要的具体操作。文档中提到的内容部分...
Java字节码指令集是Java虚拟机(JVM)执行程序的基础,它是Java源代码经过编译后的二进制表示形式。每个字节码指令都由一个操作码(Opcode)和可能的操作数组成,用于控制JVM执行各种操作。本文将深入探讨Java字节码...
字节码指令通过从 0 开始的索引来使用其中的数据。 * 执行环境:用于保存上次调用的方法、局部变量指针和操作数栈的栈顶和栈底指针。 * 操作数栈:用于存储运算所需操作数及运算的结果。 栈操作实例 常量池是类中...
Java字节码加密是保护Java应用程序源代码安全的重要技术手段,主要是为了防止恶意用户逆向工程分析、篡改或盗取程序的核心逻辑。在Java中,字节码(Bytecode)是程序经过编译后的中间表示,可以直接由Java虚拟机...
Java字节码执行的可并行性是指Java虚拟机执行Java字节码指令时,可以并行执行的可能性。根据Java虚拟机执行指令的特性,Java字节码指令之间存在依赖关系。通过分析依赖关系图,可以得出Java指令可并行执行的结论。 ...
使用这样的工具需要具备一定的技术背景,包括Java虚拟机原理、字节码指令集以及可能的辅助工具,如JDK的`javap`命令用于查看字节码,或`jad`工具进行反编译。 总之,Java字节码编辑器是一个强大的工具,它为开发者...
字节码指令是Java字节码的核心,它们以单字节的指令码表示,后续可能跟上一些参数。Java虚拟机的指令集分为五大类: 1. 数据操作指令:处理基本数据类型的运算,如IADD(整数加法)。 2. 操作数栈管理指令:控制栈顶...
Java字节码文件查看工具,如JD-GUI,是开发者们深入理解Java应用程序内部机制的重要辅助工具。这类工具能够帮助我们查看并分析.class文件,这些文件是Java源代码经过编译后的二进制形式,包含了运行时所需的所有指令...
使用JByteMod需要一定的Java字节码知识,但它的直观界面和丰富的功能使得这个过程相对平易近人。无论是开发、调试还是研究,JByteMod都是一个强大的工具,能够帮助开发者更深入地理解和操作Java程序。
Java字节码指令集是Java虚拟机(JVM)执行程序的基本单位,它构成了Java类文件的二进制表示形式。这些指令集控制了JVM如何解析和执行Java代码。在JVM中,程序的执行基于堆栈模型,其中每个线程都有自己的程序计数器...
Java字节码是Java编程语言的一个重要特性,它在Java程序执行过程中扮演着核心角色。本文将深入探讨Java字节码的基本概念、作用以及其在Java虚拟机(JVM)中的运行机制。 Java字节码是一种低级的、平台无关的指令集...
Java 字节码编程 Java 字节码是 Java 程序的中间表示形式,它可以被 Java 虚拟机(JVM)解释执行。了解 Java 字节码可以帮助开发者更好地理解 Java 程序的执行机制,提高程序的执行效率和排除错误。 一、Java 类...
Class 文件结构是 Java 字节码的载体,它是一种特殊的二进制文件格式,包含了 Java 虚拟机指令集和符号表以及若干其他辅助信息。Class 文件中存储了 Java 程序的定义信息,但它并不一定以磁盘文件的形式存在。 ...
2. **创建字节码**:使用`InstructionFactory`和`MethodGen`可以生成字节码指令。 ```java MethodGen method = new MethodGen(Constants.ACC_PUBLIC, Type.VOID, new String[]{"int"}, new String[]{"arg"}, ...
方法表包含方法的元数据,如方法名、返回类型、参数列表和字节码指令。 8. **属性表** 附加属性表提供额外信息,如`Code`属性包含了方法的实际字节码,`Exceptions`属性记录了可能抛出的异常,`Annotations`和`...
Java字节码文件反编译是一项重要的技术,它允许开发者查看和理解已编译的Java类文件(.class文件)内部的源代码结构。在Java中,源代码被编译成字节码,这是一种中间语言,由Java虚拟机(JVM)执行。然而,有时我们...
Java字节码反编译是Java开发者在进行代码分析、逆向工程或学习类库源码时常用的一种技术。它允许我们将已经编译过的.class文件转换回可读性更强的.java源代码文件,以便理解程序的运行逻辑。在这个过程中,我们通常...
**Recaf:现代Java字节码编辑器** 在Java开发领域,字节码编辑器是一种不可或缺的工具,它允许开发者查看、分析并修改Java类文件的字节码,从而实现对程序运行时行为的深入控制。Recaf是这样一个现代、用户友好的...
3. **字节码指令集**:Java字节码指令集包括许多单字节或双字节的指令,如`aload_0`(加载局部变量0到操作数栈)、`iconst_1`(将整数1压入操作数栈)等。这些指令控制程序的流程,进行数据处理。 4. **字节码优化*...