把程序变成虚拟指令

源程序可以先翻译成由虚拟机规定的一组指令,再交给运行系统。字节码保存的是这种中间层的程序表示,而不是用户原来输入的自然语言说明,也不必等同于当前处理器的机器码。指令可以表达加载数据、计算、分支与调用等动作,具体含义由所用指令集规定。

参考:[1] [2]

指令怎样取得输入

Java虚拟机的不少指令使用操作数栈,先取出所需值,再把计算结果放回;其他虚拟机也可以采用不同的组织方式。指令格式通常区分操作码与操作数,某些指令还携带额外数据。虽然名称里有“字节”,也不能据此断言每条完整指令的长度永远恰好为一个字节。

参考:[1] [2]

反汇编展示执行表示

反汇编工具把字节码转换成便于阅读的指令列表,帮助观察源表达式被怎样分解。Python的dis模块就提供这种接口,但文档明确把CPython字节码视为实现细节,不保证跨版本或跨虚拟机稳定。工具显示的是特定实现的执行表示,而不是一份对所有Python系统都有效的永久格式。

参考:[2]

同一表示可以有不同执行方式

运行环境可以解释虚拟指令,也可以进一步将它们编译为机器码;拥有字节码并不自动决定全部性能。JVM规范与CPython的实现约定也有不同的兼容目标。讨论可移植时,必须说明适用的运行环境和版本,不能把“不是本机机器码”直接推成“能够在任何设备上运行”。

参考:[1] [2]