考虑到跨平台,因此没法使用AOT;优化
考虑到执行效率,因此没法所有使用JIT;翻译
编译技术大约分为两种,一种AOT,只线下(offline)就将源代码编译成目标机器码,这是广泛用在系统程序语言中;另外一种是JIT,只及时的编译,可是大部分的JIT引擎,针对的是将IR(中间代码,如JavaByteCode) 在运行时, 有针对性的翻译成机器码。io
对于JIT咱们必须认识到,JIT不是简单的讲字节码翻译成机器码。一个JIT引擎要想快,主要取决于:1. 经过搜集runtime信息,识别出程序的热点(2/8原则)2. 最重要的一点,根据信息实时优化技术的使用。相反,JIT并不单单是个字节码到机器码的直译机器。编译
那么楼主疑问,为什么不直接所有翻译成机器码了?要回答这个问题,必需要提到如下两个观点:1.JIT是重型优化,自己overhead很大. 2. 最重要的,现代JIT技术必须依赖runtime信息,但要获得runtime信息,程序必须执行.下面稍微解释一下.效率
做者:dianpeng
连接:https://www.zhihu.com/question/37389356/answer/72460624
来源:知乎
著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。程序