解释器和JIT编译器

解释器

1.初衷:单纯的实现Java程序的跨平台,避免采用静态编译将其转化为机器指令,运行时采用逐行解释字节码并执行程序

2.工作机制

(1)担任翻译者,将字节码文件中的内容翻译为机器指令并执行

(2) 每执行完一条指令后,便根据pc程序计数器执行下一条指令

3.分类

两套解释执行器为古老的字节码解释器和模板解释器

字节码解释器:执行时通过纯软件代码模拟字节码的执行,效率低下

模板解释器:执行时将每一条字节码和一个模板函数相关联,模板函数直接产生这条字节码的机器指令,提高解释器的性能。

由于解释器的设计和实现上非常简单,因此除Java语言外,其他高级语言也拥有同样的解释器,且解释器的执行效率低,jvm也支持jit编译器。

JIT编译器

1.避免函数被直接解释执行,先将整个函数体编译成机器指令,再执行相应的机器指令,提高执行效率。

2.Java语言的编译过程时一段不确定的操作过程,可以是以下任意一种:

(1)前端编译器:把*.java文件转化为*.class(字节码文件)的过程

(2)后端编译器(jit编译):把字节码转为机器码的过程

(3)静态提前编译器(AOP):直接把*.java文件编译为本地机器码的过程

3.采用热点代码及探测方式

 根据代码被调用执行的频率,在执行期间根据哪些经常被调用的热点代码做深度优化,将其直接编译为机器码,提高执行效率。

4.热点代码

(1)一个被多次调用的方法

(2)一个方法体内部循环多次的循环体

5.不同虚拟机采用的热点探测方式不同,其中hotspot vm 采用基于计数器的热点探测方式,为每个方法建立两个不同类型的计数器,即调用计数器和回边计数器,分别用于统计方法的调用次数和循环体的执行次数。

6.在Client模式下,阈值为1500,server下阈值为10000,超过便会触发jit编译,可通过虚拟机参数-xx:compileThreshold设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值