You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

21 lines
1.2 KiB

---
字节码概述
---
### 概述
Java 虚拟机的指令由一个字节长度的操作码(opcode)和紧随其后的可选的操作数(operand)构成。“字节码”这个名字的由来也是因为操作码的长度用一个字节表示。
```
<opcode> [<cperand1>,<operand2>]
```
比如将整形常量 100 压栈到栈顶的指令是 bipush 100,其中 bipush 就是操作码,100 就是操作数。
因为操作码长度只有一个字节长度,这使得编译后的字节码文件非常小巧紧凑,但同时也直接限制了整个 JVM 操作码指令集的数量最多只能有 256 个,目前已经使用了 200+。
大部分字节码指令都包含了所要操作的类型信息。比如 ireturn 用户返回一个 int 类型的数据,dreturn 用户返回一个 double 类型的数据,freturen 指令用户返回一个 float 类型的数据,这种方式也使得字节码实际的指令类型远小于 200 个。
字节码使用大端序表示,即高位在前,低位在后的方式。
字节码并不是某种虚拟 CPU 的机器码,而是一种介于源码和机器码中间的一种抽象表示方法,不过字节码通过 JIT 技术可以被进一步编译成机器码。