第十一章 晚期(运行期)优化html
一、HotSpot虚拟机内的即时编译前端
解释器与编译器:算法
即时编译器:后端
解释器与编译器二者各有优点:数组
HotSpot虚拟机中即时间编译器:缓存
HotSpot虚拟机的分层编译策略:架构
编译对象:性能
触发条件:优化
方法调用计数器;spa
回边计数器:
编译过程:
查看及分析即时编译结果:
二、编译优化技术
概述:
公共子表达式消除:
数组边界检查消除:
if(foo!=null){ return foo.value; }else{ throw new NullPointException(); }
在使用隐式异常优化以后,虚拟机会把上面伪代码所表示的访问过程变为以下伪代码。
try{ return foo.value; }catch(segment_fault){ uncommon_trap(); }
虚拟机会注册一个Segment Fault信号的异常处理器(伪代码中的uncommon_trap()),这样当foo不为空的时候,对value的访问是不会额外消耗一次对foo判空的开销的。代价就是当foo真的为空时,必须转入到异常处理器中恢复并抛出NullPointException异常,这个过程必须从用户态转到内核态中处理,结束后再回到用户态,速度远比一次判空检查慢。当foo极少为空的时候,隐式异常优化是值得的,但假如foo常常为空的话,这样的优化反而会让程序更慢,还好HotSpot虚拟机足够“聪明”,它会根据运行期收集到的Profile信息自动选择最优方案。
方法内联:
逃逸分析:
转载请于明显处标明出处: