JIT Compiler

首先解释一下两个概念:

编译执行:使用编译执行的程序一般称为编译程序,这是一类很重要的语言处理程序,它把高级语言(如FORTRAN、COBOL、Pascal、C等)源程序作为输入,进行翻译转换,产生出机器语言的目标程序,然后再让计算机去执行这个目标程序,得到计算结果。大多数的编译程序直接产生机器语言的目标代码,形成可执行的目标文件,但也有的编译程序则先产生汇编语言一级的符号代码文件,然后再调用汇编程序进行翻译加工处理,最后产生可执行的机器语言目标文件。


解释执行:它将源语言直接作为源程序输入,解释执行解释一句后就提交计算机执行一句,并不形成目标程序。解释执行不依赖于平台,因为编译器会根据不同的平台进行解析。

C/C++ 等都是编译型语言,而Java,C#等都是解释型语言。脚本语言是一种解释性的语言,例如vbscript,javascript,installshield script,ActionScript等等,它不象c\c++等可以编译成二进制代码,以可执行文件的形式存在.
脚本语言不需要编译,可以直接用,由解释器来负责解释。
脚本语言一般都是以文本形式存在,类似于一种命令.
举个例子说,如果你建立了一个程序,叫aaa.exe,可以打开.aa为扩展名的文件.
你为.aa文件的编写指定了一套规则(语法),当别人编写了.aa文件后,你的程序用这种规则来理解编写人的意图,并作出回应.那么,这一套规则就是脚本语言


最早的Java建置方案是由解释器(interpreter),将每个Java指令都转译成对等的微处理器指令,并根据转译后的指令先后次序依序执行,由于一个Java指令可能被转译成十几或数十几个对等的微处理器指令,这种模式执行的速度相当缓慢。
针对这个问题,业界首先开发出JIT(just in time) 编译器。当Java执行runtime环境时,每遇到一个新的类(class),类是Java程序中的功能群组-JIT编译器在此时就会针对这个类进行编译(compile)作业。经过编译后的程序,被优化成相当精简的二进制,这种程序的执行速度相当快。花费少许的 编译时间来节省稍后相当长的执行时间,JIT这种设计的确增加不少效率,但是它并未达到最顶尖的效能,因为某些极少执行到的Java指令在编译时所额外花费的时间可能比转译器在执行时的时间还长,针对这些指令而言,整体花费的时间并没有减少。
基于对JIT的经验,业界发展出动态 编译器(dynamic compiler),动态编译器仅针对较常被执行的程序码进行编译,其余部分仍使用转译程序来执行。也就是说,动态 编译器会研判是否要编译每个类。动态 编译器拥有两项利器:一是转译器,另一则是JIT,它透过智慧机制针对每个类进行分析,然后决定使用这两种利器的哪一种来达到最佳化的效果。动态 编译器针对程序的特性或者是让程序执行几个循环,再根据结果决定是否编译这段程序码。这个决定不见得绝对正确,但从统计数字来看,这个判断的机制正确的机会相当高。事实上,动态 编译器会根据「历史资料」做决策,所以程序执行的时间愈长,判断正确的机率就愈高。以整个结果来看,动态 编译器产生的程序码执行的速度超越以前的JIT技术,平均速度可提高至50%。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值