Android ART是否假设所有代码都在编译时出现?如果是的话,它能利用这一点进行优化吗?

Android ART是否假设所有代码都在编译时出现?如果是的话,它能利用这一点进行优化吗?,android,compilation,jit,dalvik,Android,Compilation,Jit,Dalvik,Android ART运行时是一个提前(aot)编译器,与Dalvik和Hotspot相反,后者只进行实时(jit)编译 jit编译的一个优点是它可以内联那些不能证明是正确目标的方法。在这样的代码中: 公共类Foo{ 公共整数操作(整数a,整数b){返回a+b;} } 公共类酒吧{ 公共int doIt(INTA,长重复,Foo-Foo){ for(长i=0;i

Android ART运行时是一个提前(aot)编译器,与Dalvik和Hotspot相反,后者只进行实时(jit)编译

jit编译的一个优点是它可以内联那些不能证明是正确目标的方法。在这样的代码中:

公共类Foo{
公共整数操作(整数a,整数b){返回a+b;}
}
公共类酒吧{
公共int doIt(INTA,长重复,Foo-Foo){
for(长i=0;i
通常不可能将
doOperation
内联到
doIt
,因为可以创建一个派生类
DerivedFoo
,该类重写
doOperation
方法。对于Java,这样的
DerivedFoo
类不需要在编译时出现,但可以在运行时出现,甚至可以在运行时动态生成

jit编译的一个优点是,编译器可以专门处理正在使用的确切代码和类型,例如,HotSpot可以在上面的代码中内联
doOperation
调用,并且如果传入的
foo
不是假定的
foo
,则可以动态地去优化

Android-ART会提前编译,因此它无法进行这样的优化,除非它假设所有代码都在编译时出现,并且没有其他类派生自
Foo

ART是否做出了这样的假设,它是否能够在编译过程中利用这一假设,例如将
doOperation
内联到上述代码中的
doIt
?如果不是,如果它被标记为final,它是否会内联
doOperation