手写 Python 虚拟机
海纳
华为资深编译专家,原 Huawei JDK 团队负责人
562 人已学习
新⼈⾸单¥59
手写 Python 虚拟机
15
15
1.0x
00:00/00:00
登录|注册

03|编程语言全景图(下):虚拟机是如何执行字节码的?

你好,我是海纳。
上一节课我们介绍了编译器是如何把源代码翻译成字节码的,这一节课我们将会沿用上节课中的例子,实现一个简单的虚拟机,来运行生成的字节码
我们先来看上节课定义的字节码。
#define BINARY_MUL 20
#define BINARY_DIV 21
#define BINARY_ADD 23
#define BINARY_SUB 24
#define LOAD_CONST 100
上节课的最后,生成的字节码内容是 [100, 00, 12, 100, 00, 48, 20, 100, 00, 59, 23],我们把这段字节码翻译出来。
LOAD_CONST 12
LOAD_CONST 48
BINARY_MUL
LOAD_CONST 59
BINARY_ADD
这段字节码共包含了 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
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • Geek_0050d6
    直播课🈶回放吗?

    编辑回复: 有回放,不过建议还是现场听,比较有意思

    2024-05-10归属地:北京
  • 林先森
    老师好,您的例子中是按照基于栈的方式来实现虚拟机执行字节码的,能讲讲基于寄存器的虚拟机是如何执行字节码的吗?

    作者回复: lua虚拟机是机遇寄存器的。其实核心思想很简单:用变量表示寄存器就可以了。可以加微信群,了解即时的直播信息。我们可以在直播课里去讲解。

    2024-05-09归属地:浙江
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部