Android 6.0中art虚拟机编译dex时已完全放弃使用LLVM

记得在Android 4.4发布的时候,Google正式引入了称做ART(Android Run Time)的虚拟机,用来取代传统的Dalvik虚拟机。

ART虚拟机最大的特点就是,将代码优化的过程从Davlik的JIT(Just In Time)模式转换成了AOT(Ahead Of Time)模式。也就是说,在程序正式执行之前就完成了优化和编译的工作。而编译的时机时在程序安装的时候,由dex2oat程序完成的。

记得在刚开始引入ART的时候,大家都说是用的LLVM编译器。确实,在源代码中也有LLVM编译器的影子:


但实际上,dex2oat编译的时候有两种模式。一是所谓的Quick模式,这也是Android的默认编译模式;二是所谓的Portable模式,一份代码通吃所有平台。

Quick模式是Google自己实现的,架构上也参考了LLVM,分为前端(Frontend)和后端(Backend),优化也是自己做的。

而Portable模式确实是实用的LLVM编译器,不过在默认情况下,编译dex2oat的时候并不会加上LLVM的部分。

通过阅读art目录下的Android.mk文件内的内容,可以看到,llvm目录下的代码是通过变量ART_USE_PORTABLE_COMPILER来打开的:


如果不做任何任何修改,默认情况下,编译的时候这个变量的值是false,并不会被编译进dex2oat可执行文件中。

这一部分代码一直到5.1.1版本中都存在。既然没用,为什么还要保留呢?笔者一直感觉非常奇怪。

这几天6.0.0的代码发布了,第一时间下载了一份,发现所有以前关于LLVM代码的部分都统统被删除了:


一并删除的是所谓的Portable编译模式。

所以,从今后起,再也不会用到LLVM的任何代码了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值