jvm3(备忘录)执行引擎

1将字节码指令解释/编译为对应平台上的本地机器指令。

                                                                                                |------->win jvm

Java程序--编译-->字节码文件----执行引擎(在虚拟机上翻译)--------->linux jvm

                                                                                                |------->mac jvm

2java代码编译和执行过程:

 橙色部分(前端编译)和jvm无关,是前端编译器。字节码是一种中间状态的二进制文件(实现跨平台)。

6解释器对字节码采用逐行解释方式执行,JIT编译器:jvm将源代码直接编译成和本地机器平台相关的机器语言。既可以解释也可以编译执行。

8、高级语言----汇编语言----机器语言

9、解释器比较低效,而即时编译器可以避免函数被解释执行,将整个函数体编译成为机器码,每次函数执行之后只执行编译后的机器码即可。

10、取长补短:JIT(即时编译器)比解释器执行速度快。保留解释器,解释器响应速度快,省去编译时间。但jit需要把代码编译成本地代码,这需要一定时间。(hotspot)在看重启动时间的场景会需要两者搭配,而像服务端应用就不需要,一般只保留解释器。

JIT编译器

前端编译器(javac):.java--->.class;后端编译器(JIT):字节码---->机器码;静态提前编译器(AOT):.java--->机器码。

计数器探测热点代码的调用次数,Client(c1)模式阈值是1500次,Server(c2)模式下是10000次,超过阈值,JIT编译就触发。

JIT编译出来的机器码性能比解释器要高,c2启动时长比c1慢,系统稳定执行之后,c2执行速度远远快于c1.

即时编译:在程序运行的当中,将字节码转换为可在硬件上直接运行的机器码。

AOT:在程序运行之前,将字节码转换为机器码的过程。减少编译器预热,第一次运行快。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值