HotSpot VM,JIT概念

本文深入探讨HotSpotVM的混合模式执行引擎,包括解释器和自适应编译器的工作原理。HotSpotVM通过监测方法调用次数判断代码热度,仅编译热点代码,实现高效执行。同时,对比JIT编译与自适应编译的区别,阐述动态编译在程序运行时的编译机制。
摘要由CSDN通过智能技术生成

jvm笔记

HotSpot VM

HotSpot VM得名于它得混合模式执行引擎:这个执行引擎包括解释器和自适应编译器(adaptive compiler)。默认配置下,一开始所有Java方法都由解释器执行。解释器记录着每个方法得调用次数和循环次数,并以这两个数值为指标去判断一个方法的“热度”。显然,HotSpot VM是以“方法”为单位来寻找热点代码。等到一个方法足够“热”的时候,HotSpot VM就会启动对该方法的编译。这种在所有执行过的代码里只寻找一部分来编译的做法,就叫做自适应编译(adaptive compilation)。为了实现自适应编译,执行引擎通常需要有多层:至少要有一层能够处理初始阶段的执行,然后再让自适应编译处理其中部分代码。

JIT

JIT编译,全称 just-in-time compilation,按照其原始的、严格的定义,是每当一部分代码准备要第一次执行的时候,将这部分代码编译,然后跳进编译好的代码里执行。这样,所有执行过的代码都必然会被编译过。早期的JIT编译系统对同一个块代码只会编译一次。JIT编译的单元也可以选择是方法/函数级别,或者别的,例如trace。严格说JIT编译与自适应编译相比:* 前者的编译时机比后者早:第一次执行之前 vs 已经被执行过若干次* 前者编译的代码比后者多:所有执行过的代码 vs 一部分代码JIT编译与自适应编译都属于“动态编译”(dynamic compilation),或者叫“运行时编译”的范畴。特点是在程序运行的时候进行编译,而不是在程序开始运行之前就完成了编译;后者也叫做“静态编译”(static compilation)或者AOT编译(ahead-of-time compilation)。现在“JIT编译”这个名词已经被泛化为等价于“动态编译”,所以包含了严格的JIT编译和自适应编译。就这个角度说,HotSpot VM仍然在使用“JIT编译”;里面的Client Compiler(C1)和Server Compiler(C2)也常被称为“JIT编译器“。要注意,这样的说法已经不是指严格意义上的“JIT”了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值