执行引擎 Execution Engine

解释器和JIT编译器

执行引擎的执行完全依赖PC寄存器。前端编译由javac完成,后端编译由执行引擎完成。

解释器:对字节码采用逐行解释的方式执行,将每条字节码内容翻译为本地机器指令执行

JIT编译器:虚拟机将源代码直接翻译成和本地机器平台相关的机器语言

 

何时使用JIT编译器?

        一个被多次调用的方法,或者是一个方法体内部循环次数较多的循环体都可被称之为“热点代码”,都可以通过JIT编译器编译为本地机器指令。由于这种编译方式在方法执行过程中,因此称之为栈上替换,或简称OSR。

        具体多少次可达到标准,需要一个阔值,主要依靠热点探测。HotSpot采用的热点探测方式是基于计数器的热点探测。建立两个不同类型的计数器,分别为方法调用计数器(方法的调用次数)和回边计数器(循环体循环次数)。

        方法调用计数器,client默认1500次,service默认10000次,草果就触发JIT编译。阔值设置参数-XX:CompileThreshold。

        热度衰减,一段时间内达不到次数,就会减少一半,这段时间就称之为半衰周期。虚拟机参数-XX:-UseCounterDecay设置是否进行热度衰减。可通过-XX:CounterHalfLifeTime参数设置半衰周期,单位是秒。

        Java虚拟机内部有两个JIT编译器,-client和-service,64位操作系统默认-service。区别就是-service优化强一些。C1的优化主要是方法内联、去虚拟化、冗余消除;C2的优化主要在全局层,逃逸分析是优化的基础:标量替换、账上分配、同步消除(synchronized)。 

        可用参数设置解释器和JIT编译器混的使用:

                -Xint解释器

                -Xcomp编译器器

                -Xmixed混合使用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值