名词解释:
JIT(JUST - IN -TIME)实时编译
AOT(AHEAD-OF-TIME)预先编译
它们两者最根本的区别,就在于编译代码的时机,所谓的编译代码,就是把人类写的代码,翻译成机器字节码指令这么一个过程。
优缺点:
JIT优点:
1·可以实时根据硬件资源情况实时编译生成最优指令。
2·能实现动态链接,动态编译加载需要用到的模块代码,节省内存空间
3·能通过程序运行中内存和磁盘空间使用率情况,定位代码优化点(这是AOT无法做到的)
JIT缺点:
1·边运行边编译,会造成进程的卡顿,编译的同时收集编译信息,虽然会进行动态优化(例如热点代码热点方法等),但是会占用更多的内存资源
2·第一次编译运行时候较慢
方法内联:
假设一个方法checkUser,每一个接口都需要调用,用于校验身份和权限,按照方法的入栈出栈,这个方法会被每一个工作线程不停压入自己的私有栈中,执行完该方法后,再跳转回上一个方法,这样性能不高,而JIT优化中的一点方法内联,则支持将该方法代码复制到调用方法中,从而避免发生真实的方法调用,也就是checkUser的代码过来就好,它自身不要压进来。而JIT要实现这一点优化,很明显要有个地方保存类似“方法编译记录”之类的缓存,而这也可以理解为什么JIT更加占用内存以及支持更高的吞吐量<