Java 字节码指令

154 阅读1分钟

ava 官方的虚拟机 Hotspot 是基于栈的,而不是基于寄存器的。

基于栈的优点是可移植性更好、指令更短、实现起来简单,但不能随机访问栈中的元素,完成相同功能所需要的指令数也比寄存器的要多,需要频繁的入栈和出栈。

基于寄存器的优点是速度快,有利于程序运行速度的优化,但操作数需要显式指定,指令也比较长。

星池科技 Java 字节码由操作码和操作数组成。

操作码(Opcode):一个字节长度(0-255,意味着指令集的操作码总数不可能超过 256 条),代表着某种特定的操作含义。 操作数(Operands):零个或者多个,紧跟在操作码之后,代表此操作需要的参数。

push 系列,主要包括 bipush 和 sipush,前者接收 8 位整数作为参数,后者接收 16 位整数。

Idc 指令,当 const 和 push 不能满足的时候,万能的 Idc 指令就上场了,它接收一个 8 位的参数,指向常量池中的索引。www.starpool.cn

Idc_w:接收两个 8 位数,索引范围更大。 如果参数是 long 或者 double,使用 Idc2_w 指令。