深入理解Java虚拟机第三版 第四部分 程序编译与代码优化

第十章 前端编译与优化

10.2 Javac编译器

10.3.1 泛型  类型擦除

10.3.2 自动装箱、拆箱与遍历循环

10.3.3 条件编译(ifelse)

 

第十一章 后端编译与优化

11.2 即时编译器

11.2.1 解释器与编译器

程序需要迅速启动和执行时,解释器先发挥作用,立即运行。随着时间的推移,编译器发挥作用,把越来越多的代码编译成本地代码,提高执行效率。当环境对内存的限制较大,使用解释器节约内存,反之,使用编译器可以提高效率。

HotSpot内置了两个(或三个)编译器,其中两个是客户端编译器C1、服务端编译器C2,第三个在JDK10出现,Graal编译器,长期目标时取代C2。

11.2.2 编译对象与触发条件

在运行过程中会被即时编译器编译的目标是“热点代码”,主要包括两类:被多次调用的代码;被多次执行的循环体

对于“多次”的定量:

要知道某段代码是不是“热点代码”,需要执行热点检测,方法有两种:基于采样的热点检测;基于计数器的热点检测。

基于采样就是周期检查栈顶,如果某个方法经常出现在栈顶,即使热点方法;

基于方法的就是维护计数器,HotSpot使用计数器;

两种计数器:方法调用计数器(针对方法)、回边计数器(针对循环体)

方法计数器:在客户端模式下,默认1500次;在服务端模式下,默认10000次。

回边计数器在客户端模式下,默认13995次;在服务端模式下,默认10700次。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值