编译原理之美
宫文学
北京原点代码 CEO
46197 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 45 讲
开篇词 (1讲)
编译原理 · 期中考试周 (1讲)
编译原理之美
15
15
1.0x
00:00/00:00
登录|注册

34 | 运行时优化:即时编译的原理和作用

软件开发中的JIT技术应用
JIT技术的实现
模糊的编译期和运行期界限
向量化处理
PostgreSQL的性能提升
优化算法的执行
模块的内存IR形式
动态链接技术
JIT的地址解析
静态编译的重定位
内存权限设置
机器码加载到内存
JIT的实际应用
JIT的优势
JIT的特点
解释执行 vs. 编译执行
利用即时编译技术获得优化效果
目标代码存放位置
AOT vs. JIT
即时编译(JIT)
提前编译(AOT)
一课一思
课程小结
用JIT提升系统性能
LLVM对即时编译的支持
目标代码链接
目标代码加载
即时编译的特点及原理
运行期原理
使用场景
编译方式
运行时优化:即时编译的原理和作用

该思维导图由 AI 生成,仅供参考

前面所讲的编译过程,都存在一个明确的编译期,编译成可执行文件后,再执行,这种编译方式叫做提前编译(AOT)。 与之对应的,另一个编译方式是即时编译(JIT),也就是,在需要运行某段代码的时候,再去编译。其实,Java、JavaScript 等语言,都是通过即时编译来提高性能的。
那么问题来了:
什么时候用 AOT,什么时候用 JIT 呢?
在讲运行期原理时,我提到程序编译后,会生成二进制的可执行文件,加载到内存以后,目标代码会放到代码区,然后开始执行。那么即时编译时,对应的过程是什么?目标代码会存放到哪里呢?
在什么情况下,我们可以利用即时编译技术,获得运行时的优化效果,又该如何实现呢?
本节课,我会带你掌握,即时编译技术的特点,和它的实现机理,并通过一个实际的案例,探讨如何充分利用即时编译技术,让系统获得更好的优化。这样一来,你对即时编译技术的理解会更透彻,也会更清楚怎样利用即时编译技术,来优化自己的软件。
首先,来了解一下,即时编译的特点和原理。

了解即时编译的特点及原理

根据计算机程序运行的机制,我们把,不需要编译成机器码的执行方式,叫做解释执行。解释执行,通常都会基于虚拟机来实现,比如,基于栈的虚拟机,和基于寄存器的虚拟机(在32 讲中,我带你了解过)。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

JIT技术是一种在程序运行时将代码编译成目标代码的方式,通过动态加载和执行代码,JIT能够提供即时运行、可移植性和性能优势。文章介绍了JIT的特点、原理和实现机理,以及其在提升软件性能方面的应用。以PostgreSQL为例,通过基于LLVM的JIT功能,性能得到显著提升。此外,JIT技术还可以用于提高数据库等基础软件的性能,对于参与研发此类软件的人来说,掌握JIT技术将会有很大的加分。总的来说,JIT技术在现代编程语言中具有重要意义,可以帮助软件获得性能上的提升。文章还提出了一些思考问题,如是否可以利用JIT技术提升支持DSL的软件性能,为读者提供了进一步思考和探索的空间。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《编译原理之美》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • 刘強
    感觉越来越像lisp的“代码即数据”了。在内存中运行时编译(生成)代码(数据),然后执行。编译期和解释期界限越来越模糊,怪不得有人说所有的编程语言都在向lisp进化。

    作者回复: 看得出你是Lisp粉。 我曾经相当迷恋Lisp。用过一段时间的Common Lisp,甚至试图向同事推广。可是后来发现还是有点小众,解决一些技术问题资料也太少,后来就搁下了。但在设计我手头的语言的时候,还是经常会想想Lisp的特性。 我在后面关于元编程的一讲,会探讨一下Lisp。

    2019-11-11
    9
  • Cryhard
    看来postgresql 11的生产级别试用可以提上日程了。似乎需要使用llvm编译一下?

    作者回复: 官方应该有预编译好的版本吧?

    2019-12-31
    1
  • 无名氏
    老师,请教下,应用进程的静态编译能使用的共享库吗,如果能使用那也要编译进符号表?动态编译使用共享库,共享库已什么形式存在,在一个独立的内存中,别的程序进行引用?
    2022-04-16
    1
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部