JVM之Dalvik和ART的区别

什么是Dalvik:
    Dalvik是Google公司自己设计用于Android平台的Java虚拟机。Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为 .dex (即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。
每一个 Android 应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik 虚拟机实例。而每一个 DVM 都是在 Linux 中的一个进程,所以说可以认为是同一个概念。

什么是ART:
    Android操作系统已经成熟,从Android4.4开始,Google的Android团队开始将注意力转向一些底层组件,其中之一是负责应用程序运行的Dalvik运行时。Google开发者已经花了两年时间开发更快执行效率更高更省电的替代ART运行时。 ART代表Android Runtime,其处理应用程序执行的方式完全不同于Dalvik,Dalvik是依靠一个Just-In-Time (JIT)编译器去解释字节码。开发者编译后的应用代码需要通过一个解释器在用户的设备上运行,这一机制并不高效,但让应用能更容易在不同硬件和架构上运 行。ART则完全改变了这套做法,在应用安装时就 预编译字节码到机器语言,即将中间代码静态编译成本地代码 ,这一机制叫Ahead-Of-Time ( AOT )编译。在移除解释代码这一过程后,应用程序执行将更有效率,启动更快。

1. Dalvik与JVM的区别
(1)Dalvik指令集是 基于寄存器 的架构,执行特有的文件格式—— dex字节码 (适合内存和处理器速度有限的系统)。而JVM是 基于栈 的。相对于基于栈的JVM而言,基于寄存器的Dalvik VM实现虽然牺牲了一些平台无关性,但是它在 代码的执行效率 上要更胜一筹。
(2)每一个Android 的App是 独立跑在一个VM中 的。因此一个App crash只会影响到自身的VM,不会影响到其他。Dalvik经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且 每一个 Dalvik应用作为一个独立的Linux进程执行
 
2. Dalvik与ART的区别
(1)在Dalvik下,应用每次 运行 都需要通过 即时编译器 (JIT)将字节码转换为机器码,即 每次都要编译加运行 ,这虽然会使安装过程比较快,但是会 拖慢应用的运行效率。 而在ART 环境中,应用在 第一次安装 的时候, 字节码就会预编译(AOT)成机器码 ,这样的话,虽然设备和应用的 首次启动(安装慢了) 会变慢,但是以后每次启动执行的时候,都可以直接运行,因此运行效率会提高。
(2)ART占用空间比Dalvik大( 原生代码占用的存储空间更大 ,字节码变为机器码之后,可能会增加10%-20%),这也是著名的“空间换时间大法"。
(4) 预编译 也可以明显改善 电池续航 ,因为应用程序每次运行时 不用重复编译 了,从而减少了 CPU 的使用频率,降低了能耗。
(5)ART提供了更好的垃圾回收表现,将垃圾回收时,程序的暂停次数由两次(分析、清理)减少到一次;程序暂停时,并行的进行垃圾回收处理;回收新近分配的、生命期短的对象,垃圾回收器花费的时间更少
 
ART优点:
1、系统性能的显著提升。
2、应用启动更快、运行更快、体验更流畅、触感反馈更及时。
3、更长的电池续航能力。
4、支持更低的硬件。
ART缺点:
1、更大的存储空间占用,可能会增加10%-20%。
2、更长的应用安装时间。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值