Dalvik和ART的区别

Dalvik和ART的区别

  1. Dalvik环境下,应用每次运行时,字节码都需要通过即时编译器(Just In Time,JIT)转换为机器码,这样每次应用启动的速度就会非常的慢。ART环境中,应用会在安装的时候,就将字节码预编译(Ahead of Time,AOT)成机器码,使其成为真正的本地应用。因此在ART环境中,应用除了在安装的时间上比Dalvik要长以外,启动和执行的速度都会比Dalvik要更快。
  2. ART占用的空间比Dalvik大,实际上就是用空间换时间,之所以会更大也是因为预编译的时候会将字节码转换成机器码,空间大概会增加10%~20%。
  3. ART不用每次运行时都重复编译,减少了CPU的使用频率,降低了能耗。

所以说,在ART的模式下,手机续航的能力会更强,总的来说,ART和Dalvik的主要区别就是一个是预编译(Ahead of Time,AOT),另外一个是即时编译(Just In Time, JIT)。

基于栈的JVMDalvik(基于寄存器)
字节码单元长度8位(1字节)16位(2字节)
单条指令长度几乎翻倍
同样逻辑指令条数
同样逻辑数据移动次数尽可能少
同样逻辑临时结果存储次数尽可能少

如何看待基于栈的虚拟机设计?

  1. JVM基于栈设计的初衷之一,是压缩代码体积
  • java设计之初最重要的一个特性就是跨平台,支持嵌入式设备和手持设备(J2ME)。
  • java设计之初的另一个特性,支持远程传输执行字节码,要降低传输开销。
  1. 基于栈的虚拟机,字节码实现简单
  • 指的是生成字节码的过程简单,而不是虚拟机本身简单,或者说是编译器的实现简单。
  • 操作时,不用考虑寄存器的地址(绝对位置),只需要把想要操作的数据出栈、入栈,然后再实现如何针对栈进行操作就可以了。
  1. 基于栈的虚拟机,可移植性高
  • 为了提高效率,虚拟寄存器要映射到真实机器的寄存器,增加移植难度。
  • 代码移植到其他硬件平台的时候,不用考虑真实机器寄存器的差异,因为操作栈的指令是通用的。

如何看待Android平台基于寄存器的设计?

  1. 更快,更省内存
  • 指令条数少
  • 数据移动次数少,临时结果存放次数少
  • 映射真实机器的寄存器
  1. Android不需要解决移植性问题
  • Android平台的操作系统的统一的
  1. 用其他方式解决了代码体积问题
  • dex文件优化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值