03|编程语言全景图(下):虚拟机是如何执行字节码的?
海纳
你好,我是海纳。
上一节课我们介绍了编译器是如何把源代码翻译成字节码的,这一节课我们将会沿用上节课中的例子,实现一个简单的虚拟机,来运行生成的字节码。
我们先来看上节课定义的字节码。
上节课的最后,生成的字节码内容是 [100, 00, 12, 100, 00, 48, 20, 100, 00, 59, 23],我们把这段字节码翻译出来。
这段字节码共包含了 5 个操作。
将数字 12 加载到操作数栈顶。
将数字 48 加载到操作数栈顶。
将两个数字从栈顶取出,并做乘法,然后将结果送回栈顶。
将数字 59 加载到栈顶。
将两个数字从栈顶取出,并做加法,然后将结果送回栈顶。
这节课我们将完成三个任务:一是将字节码从内存中写入硬盘文件中,实现字节码的序列化;二是实现一个小的虚拟机,将字节码文件再读入内存;三是比较解释器和 JIT 编译器两种不同的执行策略。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
1. 实现简单虚拟机执行生成的字节码,包括序列化和解释执行。 2. 字节码文件的保存、加载过程,以及虚拟机中字符串的处理方式。 3. 解释器类的实现,逐条取出字节码并在操作数栈上进行运算的方式进行解释执行。 4. 对比解释执行和即时编译(JIT)两种执行策略,以及JIT编译器的核心机制。 5. JIT编译的第一个核心机制:申请可写可执行的内存区域,将Java方法翻译成机器码。 6. JIT编译的第二个核心机制:基于采样的编译优化,通过性能采样来优化代码。 7. 字节码文件是编译器和虚拟机的关键中枢,编译器输出字节码文件,虚拟机从加载字节码文件开始。 8. 探讨能否使用CPython的现有机制实现插入式的JIT执行器。 9. 下一节课将研究Python字节码文件的格式。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手写 Python 虚拟机》,新⼈⾸单¥59
《手写 Python 虚拟机》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(2)
- 最新
- 精选
- Geek_0050d6直播课🈶回放吗?
编辑回复: 有回放,不过建议还是现场听,比较有意思
2024-05-10归属地:北京 - 林先森老师好,您的例子中是按照基于栈的方式来实现虚拟机执行字节码的,能讲讲基于寄存器的虚拟机是如何执行字节码的吗?
作者回复: lua虚拟机是机遇寄存器的。其实核心思想很简单:用变量表示寄存器就可以了。可以加微信群,了解即时的直播信息。我们可以在直播课里去讲解。
2024-05-09归属地:浙江
收起评论