Android编译过程分析

Android编译过程分析

从下图可得出,Android编辑过程分为:

编译字节码 -> 混淆 -> .class字节码转化dex字节码 -> 打包apk并签名
-> 运行apk -> 执行机器码。

在这里插入图片描述

那么,在Android执行机器码的过程中,又发生了什么呢?

Android运行时会读取apk中的dex字节码,并重新编译成机器码,获得更快的执行速度,在Android平台上时OAT文件。

那Android又会使用什么虚拟机来编译代码呢?

android中有DVM(Dalvik Virtual Machine)和 ART(Android RunTime)两种虚拟机。
ART是android 4.4发布的,用来替换Dalvik虚拟,但Android4.4默认采用DVM。系统会提供一个选项来开启ART。在Android 5.0时,默认采用ART。

这两种虚拟机之间的区别:

第一,在运行效率上:
DVM:每次运行,字节码都需要通过JIT进行编译为机器码,运行效率低。
ART:应用在安装时,会进行预编译(AOT),将字节码预先编译成机器码存储在本地。这样程序在每次运行时就不需要编译了,提升运行效率。

ART存在的缺点:其一,安装时间长;其二,字节码预先编译成为机器码占用空间过多。

ART的改进:Android7.0版本中加入了JIT,作为AOT的补充。其一,安装的时候,不会全部编译成机器码,减少安装的时间。其二,在运行时将热点代码编译成机器码,节省空间。

第二,在CPU的设计上:
DVM:是为32位CPU设计的。
ART:支持64位,同时也兼容32位。

第三,在GC(垃圾回收机制)上:
ART进行改进,更加频繁的执行并行垃圾收集。

第四,ART运行时堆上:
在这里插入图片描述
其中,Zygote Space 和 Image Space是进程间共享的。除了这4个Space,ART的Java堆还包括2个Mod Union Table,1个Card Table,2个Heap Bitmap,2个Object Map,以及3个Object Stack。

想了解更多,可参考以下:
学习资源一:理解Android编译过程
学习资源二:Android各类虚拟机JVM,DVM,ART区别
学习资源三:Android虚拟机Dalvik ART

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值