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