JIT(just in time)即时编译器

Posted shengulong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JIT(just in time)即时编译器相关的知识,希望对你有一定的参考价值。

JIT(just in time)

前端vs后端

在编译原理中,通常将编译分为前端和后端。其中前端会对程序进行词法分析、语法分析、语义分析,然后生成一个中间表达形式(称为IR:Intermediate Representation)。后端再讲这个中间表达形式进行优化,最终生成目标机器码。

在Java中,javac之后生成的就是中间表达形式(.class)

JVM在执行时,首先会逐条读取IR的指令来执行,这个过程就是解释执行的过程。当某一方法调用次数达到即时编译定义的阈值时,就会触发即时编译,这时即时编译器会将IR进行优化,并生成这个方法的机器码,后面再调用这个方法,就会直接调用机器码执行,这个就是编译执行的过程。

字节码-->机器码:
  1. 用的时候直接翻译(解释器)
  2. 用的时候直接翻译,并把常用的方法等缓存起来,下次再用的时候直接取用(CodeCache)

可以通过java -XX:+PrintFlagsFinal打印出所有参数的默认值

参考

  1. JVM系列之走进JIT
  2. 为什么 JVM 不用 JIT 全程编译?
  3. JVM杂谈之JIT
  4. 深入理解Java即时编译器(JIT)-上篇
  5. 深入理解Java即时编译器(JIT)-下篇

以上是关于JIT(just in time)即时编译器的主要内容,如果未能解决你的问题,请参考以下文章

Angular 中的即时 (JiT) 与提前 (AoT) 编译

Java虚拟机即时编译器技术JIT

第21题:JavaScript 编译 - JIT (just-in-time) compiler 是怎么工作的?

JIT和AOT编译详解

JIT(上):Tensorflow如何实现即时编译?

Aheadof Time Compilation(AOT) vs (JIT)Just In Time compilation approach