Java编译器中的优化技术
为了解决虚方法的内联问题,Java
虚拟机首先引入了一种名为类型继承关系分析(
Class Hierarchy Analysis,
CHA
)的技术,这是整个应用程序范围内的类型分析技术,用于确定在目前已加载的类中,某个接口是否有多于一种的实现、某个类是否存在子类、某个子类是否覆盖了父类的某个虚方法等信息。这样,编译器在进行内联时就会分不同情况采取不同的处理:如果是非虚方法,那么直接进行内联就可以了,这种的内联是有百分百安全保障的;如果遇到虚方法,则会向CHA
查询此方法在当前程序状态下是否真的有多个目标版本可供选择,如果查询到只有一个版本,那就可以假设“
应用程序的全貌就是现在运行的这个样子”
来进行内联,这种内联被称为守护内联(
Guarded Inlining
)。不过由于Java
程序是动态连接的,说不准什么时候就会加载到新的类型从而改变
CHA
结论,因此这种内联属于激进预测性优化,必须预留好“
逃生门
”
,即当假设条件不成立时的
“
退路
”
(
Slow Path
特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。