Interpreter ,JIT ,AOT
Interpeter(解释器)
通俗的说解释器就是将程序员编写的代码一条条的转译执行,在解释执行代码的同时,也维护了一个栈去存放method的传入参数、局部变量、保存当前线程的context信息。
解释器的优势在于占用内存少(可以理解为解释一条扔一条),劣势就是执行效率低下。
JIT(动态编译器)
一般JIT会和一个解释器混合执行代码,JIT的作用是将热点代码编译成机器指令,很明显这样做的缺点就是编译后的机器代码会占用一些存储空间。所以,什么样的代码算是热点代码呢?
举常见的Method-Based JIT的栗子吧,这种JIT在代码解释过程中会针对每个method做profiling(检测),通俗点就是用一个计数器对函数调用次数做统计,方法每调用一次,计数器加1,
调用次数突破threshold(门槛值)之后JIT就会对该方法做编译,这样下次再调用这个方法的时候就可以直接执行机器指令,从而提高执行效率
AOT(静态编译器)
典型的代表就是C和C++语言的编译器。它最大的特点就是在代码运行之前先将所有代码编译为机器指令,显然这样做的优点是执行速度快