Android4.4以下版本采用Dalvik虚拟机,4.4及以上采用ART虚拟机。
1,在java.vm.version < 2.0.0(Dalvik虚拟机),在App运行过程中,Dex文件字节码经过JIT即时编译器动态的来编译成可执行的本地机器码,之后再执行,而且每次重新启动App都要经过一次这样的动态编译。这会导致应用启动慢,运行慢。
2,在java.vm.version >= 2.0.0(ART虚拟机),使用AOT提前编译,在App安装时就将Dex字节码预编译转为本地机器码(原生指令),生成一个可以在本地运行的oat文件并存储在本地。优点:启动快,运行快,好点少。其在系统层面已经支持了多dex文件的处理,在预编译时合并为oat文件。
IS_VM_MULTIDEX_CAPABLE = isVMMultidexCapable(System.getProperty("java.vm.version"))
判断虚拟机是否支持multidex,根据java.vm.version判断,4.4及以上已经支持aot,安装时将字节码直接翻译成机器码,无需像jit即时编译每次重新打开app都要一遍将字节码翻译成机器码,再运行。
dalvik与art虚拟机的区别