Android编译优化:D8和R8(1)

本文讲述了Java在Android开发中的适应性变迁,从JVM的跨平台特性到Dex和Dalvik的出现,再到ART的AOT编译和Java8新特性的脱糖处理。重点介绍了D8和R8编译器在提升编译速度和优化代码体积方面的作用。
摘要由CSDN通过智能技术生成

从Java开始,JVM通过在硬件上面添加一层抽象来适配不同的CPU架构来实现跨平台,通过javac编译器将Java代码编译成字节码,进而运行在虚拟机当中,这样就无需关注底层操作系统、内存和CPU的差异,应用开发者只需要关注业务逻辑。

回到Android,我们的代码是需要跑在容量更小,电量更小的移动设备当中,JVM那套就不太适用了,所以Google就针对Android开发了Dex编译器来编译dex格式的字节码,而运行Dex字节码的Android虚拟机被称为Dalvik。因为Dalvik存在不少局限性,Google后来又退出ART虚拟机,ART使用了AOT(Ahead of Time)编译器,跟Davik的区别是,它不是在运行时解析和JIT编译,而是直接运行提前编译好的.oat文件,所以它的运行速度会更快。 按道理说到了AOT,Android的编译速度已经有了不错的效果,但是Java Android != Java SE,Java7开始引入的新语言特性不能直接用在Android开发中,为了能够用上Java8新特性,Google增加了一步编译过程—脱糖(desugaring),但这一步会导致更长的编译时间,这也是为什么Google会推出D8R8编译器来优化编译速度。

什么是脱糖?

脱糖 即在编译阶段将在语法层面一些底层字节码不支持的特性转换为基础的字节码结构,(比如 List 上的泛型脱糖后在字节码层面实际为 Object); Android 工具链对 Java8 语法特性脱糖的过程可谓丰富多彩&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值