什么是 JIT?
名如其特点,JIT —— just in time,即时编译。
把它详细化点讲,就是
一个程序在它运行的时候创建并且运行了全新的代码,而并非那些最初作为这个程序的一部分保存在硬盘上的固有的代码。就叫 JIT。
这里有几点要看的:
- 程序需要运行
- 生成的代码是新的代码,并非作为原始程序的一部分被存在磁盘上的那些代码
- 不光生成代码,还要运行。
需要提醒的是第三点,也就是 JIT不光是生成新的代码,它还会运行新生成的代码,而这些代码在存储于磁盘上时不属于该程序的一部分,它就是一个JIT。
JIT的两个阶段
我把JIT分为了两个阶段
阶段1:在程序运行时创建机器代码。
阶段2:在程序运行时也执行该机器代码。
第1阶段是JITing 99%的挑战所在,但它也是这个过程中不那么神秘的部分,因为这正是编译器所做的。众所周知的编译器,如gcc和clang,将C/C++源代码转换为机器代码。机器代码被发送到输出流中,但它很可能只保存在内存中(实际上,gcc和clang / llvm都有构建块用于将代码保存在内存中以便执行JIT)。第2阶段,看下去 ::twemoji