编译原理实战课
宫文学
北京物演科技CEO
立即订阅
2834 人已学习
课程目录
已更新 27 讲 / 共 53 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (2讲)
开篇词 | 在真实世界的编译器中游历
免费
学习指南 | 如何学习这门编译原理实战课?
预备知识篇 (9讲)
01 | 编译的全过程都悄悄做了哪些事情?
02 | 词法分析:用两种方式构造有限自动机
03 | 语法分析:两个基本功和两种算法思路
04 | 语义分析:让程序符合语义规则
05 | 运行时机制:程序如何运行,你有发言权
06 | 中间代码:不是只有一副面孔
07 | 代码优化:跟编译器做朋友,让你的代码飞起来
08 | 代码生成:如何实现机器相关的优化?
知识地图 | 一起来复习编译技术核心概念与算法
不定期加餐 (1讲)
不定期加餐1 | 远程办公,需要你我具备什么样的素质?
真实编译器解析篇 (15讲)
09 | Java编译器(一):手写的编译器有什么优势?
10 | Java编译器(二):语法分析之后,还要做些什么?
11 | Java编译器(三):属性分析和数据流分析
12 | Java编译器(四):去除语法糖和生成字节码
13 | Java JIT编译器(一):动手修改Graal编译器
14 | Java JIT编译器(二):Sea of Nodes为何如此强大?
15 | Java JIT编译器(三):探究内联和逃逸分析的算法原理
16 | Java JIT编译器(四):Graal的后端是如何工作的?
17 | Python编译器(一):如何用工具生成编译器?
18 | Python编译器(二):从AST到字节码
19 | Python编译器(三):运行时机制
20 | JavaScript编译器(一):V8的解析和编译过程
21 | JavaScript编译器(二):V8的解释器和优化编译器
22 | Julia编译器(一):如何让动态语言性能很高?
23 | Julia编译器(二):如何利用LLVM的优化和后端功能?
编译原理实战课
15
15
1.0x
00:00/00:00
登录|注册

13 | Java JIT编译器(一):动手修改Graal编译器

宫文学 2020-07-01
你好,我是宫文学。
在前面的 4 讲当中,我们已经解析了 OpenJDK 中的 Java 编译器,它是把 Java 源代码编译成字节码,然后交给 JVM 运行。
用过 Java 的人都知道,在 JVM 中除了可以解释执行字节码以外,还可以通过即时编译(JIT)技术生成机器码来执行程序,这使得 Java 的性能很高,甚至跟 C++ 差不多。反之,如果不能达到很高的性能,一定会大大影响一门语言的流行。
但是,对很多同学来说,对于编译器中后端的了解,还是比较模糊的。比如说,你已经了解了中间代码、优化算法、指令选择等理论概念,那这些知识在实际的编译器中是如何落地的呢?
所以从今天开始,我会花 4 讲的时间,来带你了解 Java 的 JIT 编译器的组成部分和工作流程、它的 IR 的设计、一些重要的优化算法,以及生成目标代码的过程等知识点。在这个过程中,你还可以印证关于编译器中后端的一些知识点。
今天这一讲呢,我首先会带你理解 JIT 编译的基本原理;然后,我会带你进入 Graal 编译器的代码内部,一起去修改它、运行它、调试它,让你获得第一手的实践经验,消除你对 JIT 编译器的神秘感。

认识 Java 的 JIT 编译器

我们先来探究一下 JIT 编译器的原理。
第 5 讲中,我讲过程序运行的原理:把一个指令指针指向一个内存地址,CPU 就可以读取其中的内容,并作为指令来执行。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《编译原理实战课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(4)

  • l6
    想知道老师的结构图一类的是什么工具画的

    作者回复: PowerPoint :-)

    2020-07-07
  • wusiration
    这是目前在win 7环境下的编译报错,
    Extracting LIBFFI_SOURCES...
    Applying patches...
    error: invalid path 'truffle\mxbuild\windows-amd64\src\libffi\libffi-3.2.1/src/x86/ffi.c
    可以分析出是编译代码在拼接路径的时候,用的是linux系统的分隔符...没找到能在哪里进行调整;

    此外,最开始碰到的报错是windows自带的cmd是gbk编码,导致在python调用decode函数默认用utf8,无法正确解析路径。

    作者回复: 在windows上,你直接试试release版本怎么样?参见:
    https://www.graalvm.org/docs/getting-started/windows

    如果解决不了,你继续留言,我找个Windows环境测试一下。

    其他同学遇到类似问题,也可以交流下。

    2020-07-04
  • wusiration
    老师,windows是不是很难编译graal,用mx工具build的时候,不停报错...

    作者回复: 理论上,在不同平台上编译graal是一样的,因为是纯Java的嘛。你注意把JDK、Python等环境配置好就行了。
    你也可以把错误贴上来,我看一下。

    2020-07-01
    1
  • Jxin
    本来我觉得jdk8的升级应该会很缓慢。但jdk9的aop编译如果不以补丁包加到jdk8,怕是能有效加快这个过程。毕竟原本不是很重要的启动时间,在servless下,变得至关重要。

    作者回复: 是。Servless,云原生,让启动时间变得敏感。

    2020-07-01
收起评论
4
返回
顶部