JIT 即时编译的运作原理

JIT

just-in-time,被翻译为即时编译,要理解即时编译我觉得和普通的编译(C,C++等静态语言)相对比便可理解,普通编译可以说是 all before runtime,在你运行程序前你需要提前把程序完全编译为机器码,然后载入运行。而即时编译,并不是在运行前就编译好,而是在运行时,in runtime,对一些频繁使用的代码段,比如被经常调用的函数,循环段等编译成机器码,以使这些“热区”无需重复性的被解释器解释来提高程序的执行效率。

像 java 和 php 7.0:

java 会通过 javac 字节码编译器将代码编译成 byteCode,运行时通过 JVM 载入 byteCode 进行解释执行,同时会将“热区”代码段发送给 JIT 编译器,JIT 会将这些代码编译成机器语言已被后期直接调用运行,无需再被解释器解释执行,从而提高执行效率。

PHP 7.0 的 JIT 也与之相同,php 是将 zend 预编译器编译好的 opcode 发送给 ZendVM 进行解释执行,同时会将 “热区” 代码段发送给 JIT 编译器,JIT 会将这些代码编译成机器语言已被后期直接调用运行,无需再被解释器解释执行,从而提高执行效率。

相对于普通的静态编译,JIT 是动态的,它会在执行中来动态的将某些热区代码段编译为机器代码,而不像静态编译在运行前就已经编译完成,当然这只是 JIT 的最基础的运作机制,还有很多高深的知识点请大家自行补脑


转载于:https://my.oschina.net/sallency/blog/538751

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值