我正在读“Java 2虚拟机内部”一书,我不明白这意味着什么:
Java虚拟机是基于堆栈的,而不是基于寄存器的,因为它的指令从操作数堆栈而不是从寄存器获取操作数。指令还可以从其他地方获取操作数,例如紧接字节码流中的操作码(表示指令的字节),或者从常量池中获取操作数。
有人能帮我演这个角色吗?
指令也可以从其他地方获取操作数,例如紧跟操作码。
或者举个例子?
发布于 2015-05-03 09:17:04
例如,有一个iinc指令,它向局部变量添加一个常量值,如下所示:
iinc 1, 8
这意味着“向局部变量#1添加8”。常量8直接写入字节码,遵循iinc指令代码和常数1:0x84 0x01 0x08
。
发布于 2015-05-03 09:16:53
这是一种奇特的方式,可以将数据值嵌入字节代码本身。
以sipush
指令为例。它将一个short
值推到堆栈上。short
的值来自于指令后面的两个字节:
sipush <byte1> <byte2>
该段没有提到的另一种情况是将值嵌入到操作代码本身中,如iconst_<N>
指令中所示。例如,
iconst_5
将常量5
加载到堆栈上。5
的值并不来自单独的存储,因为它嵌入在指令操作码的意义中。
https://stackoverflow.com/questions/30012078
复制相似问题