JIT是什么
JIT中文名是即时编译。代码执行一般分为解析执行和编译执行。编译执行又分为运行前编译和运行时编译。
JIT即时编译则发生在运行时编译。
为什么使用JIT
代码需要先通过编译,生成机器代码,才可以在机器中执行。
而编译根据编译优化的不同,会需要不同等级的时间来生成机器代码。
一般来说编译优化的程度越高,代码运行的效率会越高,而需要编译的时间也越长。
如果一个程序有100个函数,根据二八原理,有可能只有20个函数的运行时间占整个程序运行时间的大部分。
如果使用运行前编译,使用最高等级的编译优化来生成机器代码,会让编译时间变得非常长,而生成的大部分代码,可能只运行了很小一部分时间。这导致性价比不高。
使用JIT编译,可以解决上面的问题。
例如在运行前只通过低等级的编译优化,快速生成性能一般的机器代码,然后在运行时通过统计热点函数,然后再通过JIT,在运行时对热点函数进行高等级的编译优化,生成高性能的代码片段,然后后续程度再次调用此热点函数时,则使用高性能的函数代码来执行,达到提高程序性能的目的。
JIT的原理
机器代码维度理解函数调用
代码生成的机器代码是放置在内存中的,函数调用通过把下一条代码执行的代码的地址修改成函数在内存中的开始位置,来实现函数的调用。
JIT是怎么做的
- 函数发生调用
- 虚拟机发现函数代码未生成
- 虚拟机调用JIT生成机器代码
- 修改函数调用的地址
- 进入函数,进行函数的执行
网友评论