【执行引擎】

解释器和JIT编译器

解释器:当Java虚拟机启动时会根据预定义得规范对字节码采用逐行解释得方式执行,将每条字节码文件中得内容“翻译”未对应得平台得本地机器执行执行。
JIT(Just In Time Compiler)编译器:就是虚拟机将源代码直接编译成和本地机器平台相关的机器语言。
现在的JVM在执行Java代码的时候,通常都会将解释执行与编译执行二者结合起来进行。

解释器与JIT编译器共同协作

HotSpot VM是目前市面上高性能虚拟机的代表作之一。它采用解释器与即时编译器并存的架构。在Java虚拟机运行时,解释器和即时编译器能够互相协作,各自取长补短,尽力去选择最合适的方式来权衡编译本地代码的时间和直接解释执行代码的时间。

为什么已经内置了JIT,还需要解释器呢?

首先明确:当程序启动后,解释器可以马上发挥作用,省去编译的时间,立即执行。JIT要想发挥作用,把代码编译成本地代码,需要一定的执行时间。但编译未本地代码后,执行效率高。所以,当Java虚拟机启动时,解释器可以首先发挥作用,而不必等待即时编译器全部编译编译完成后再执行,这样可以省去许多不必要的编译时间,随着时间的推移,编译器发挥作用,把越来越多的代码编译成本地代码,获得更高的执行效率。

热点代码

前提概念:Java语言的“编译器”其实是一段“不确定”的操作过程,因为它可能是指一个前端编译器(其实叫“编译器的前端”更准确一些)把.java文件转变成.class文件的过程;也可能是指虚拟机的后端运行期编译器(JIT编译器)把字节码转变成机器码的过程。还可能是指使用静态提前编译器(AOT编译器)直接把.java文件编译成本地机器代码的过程。
热点代码:一个被多次调用的方法,或者是一个方法体内部的循环次数较多的循环体都可以称之为“热点代码”。那么一个方法究竟要被调用多少次,或者一个循环体究竟需要执行多少体循环才可以达到这个标准?必然需要一个明确的阈值,JIT编译器才会将这些“热点代码”编译为本地机器指令执行,这里主要依靠热点探测功能。目前HotSport VM所采用的热点探测方式是基于计数器的热点探测。

方法调用计数器

这个计数器就用于统计方法被调用的次数,它的默认阈值在Client模式下是1500次,在Server模式下是10000次。超过这个阈值,就会触发JIT编译

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值