转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52354964

0. 前言

Dalvik是Google公司自己设计用于Android平台的虚拟机。Dalvik经过优化,使其更适合Android平台。具体优点会在下面和JVM进行比较时说明。

2014年6月谷歌I/O大会,Android L 改动幅度较大,Google将直接删除Dalvik,代替它的是传闻已久的ART。

而ART又和Dalvik有什么联系和区别呢?

0.1 先对Dalvik以及ART做简单介绍:

什么是Dalvik:

Dalvik是Google公司自己设计用于Android平台的Java虚拟机。dex格式是专为Dalvik应用设计的一种压缩格式,适合于内存和处理器速度有限的系统。Dalvik允许同时运行多个虚拟机的实例,并且每一个应用作为独立的Linux进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。

什么是ART:

在Dalvik下,应用每次运行都需要通过即时编译器(JIT)将字节码转换为机器码,即每次都要编译加运行,这一机制并不高效,但让应用安装比较快,而且更容易在不同硬件和架构上运行。

ART完全改变了这种做法,在应用安装时就预编译字节码到机器语言,在移除解释代码这一过程后,应用程序执行将更有效率,启动更快。

1. Dalvik与JVM的区别

(1)Dalvik指令集是基于寄存器的架构,dex字节码更适合于内存和处理器速度有限的系统。

(2)而JVM是基于栈的。相对而言,基于寄存器的Dalvik实现虽然牺牲了一些平台无关性,但是它在代码的执行效率上要更胜一筹。

2. Dalvik与ART的区别

(1)在Dalvik下,应用每次运行都需要通过即时编译器(JIT)将字节码转换为机器码,即每次都要编译加运行,这虽然会使安装过程比较快,但是会拖慢应用以后每次启动的效率。而在ART 环境中,应用在第一次安装的时候,字节码就会预编译(AOT)成机器码,这样的话,虽然设备和应用的首次启动(安装慢了)会变慢,但是以后每次启动执行的时候,都可以直接运行,因此运行效率会提高。

(2)ART占用空间比Dalvik大(字节码变为机器码之后,可能会增加10%-20%),这也是著名的“空间换时间大法"。

(3)预编译也可以明显改善电池续航,因为应用程序每次运行时不用重复编译了,从而减少了 CPU 的使用频率,降低了能耗。

最新文章

  1. c#常用方法
  2. 文档:网络通讯包结构(crc校验,加解密)
  3. show_sync_logs
  4. shell括号操作符
  5. 前端开发调试工具控制台之console命令详解
  6. MYSQL 中的变量
  7. 用Unity3d做游戏(一)
  8. tornado超时机制
  9. Django学习-6-路由系统
  10. leetcode 283. Move Zeroes -easy
  11. fuel一键部署openstack
  12. 004_LVS及haproxy
  13. k8s(3)-Pods和Nodes的概念
  14. move UVs of a texture
  15. HTML5-应用程序缓存(Application Cache)
  16. 一个未完成的2.6.32-220内核踩内存crash分析记录
  17. 如何执行超过一百兆(100MB)的sql脚本?
  18. Jquery的分页插件
  19. Hive2:Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
  20. stm32f103各个型号芯片之间程序移植(stm32的兼容问题)

热门文章

  1. 分享6款优秀的 AR/VR 开源库
  2. flask学习(十三):过滤器
  3. Homebrew/Linuxbrew 安装常有工具
  4. MySQL根据表字段生成C#Model语句
  5. 有效二叉查找树判断(java实现)
  6. js设计模式中发布与订阅实现观察者模式例子
  7. SSH整合报错:Unable to instantiate Action, testAction, defined for 'test' in namespace '/'testAction
  8. react native 获取 软键盘高度 和 新增软键盘的组件
  9. 实现C++标准库string类的简单版本
  10. C++可调用对象与函数表