主题 : 认识Android中的Dalvik与ART虚拟机
千山同一月 万户尽皆春 千江有水千江月 万里无云万里天
级别: 总版主

UID: 998
精华: 0
发帖: 604963
威望: 528524 点
无痕币: 3089 WHB
贡献值: 0 点
在线时间: 61684(时)
注册时间: 2008-12-25
最后登录: 2024-03-29

认识Android中的Dalvik与ART虚拟机

又是一年高考时啊,在文章开始之前,IT之家先祝各位高考考生金榜题名~
每到这个时候,小编就会想起自己的高三时光和高考经历,那段时光真是让人难忘。提起高三生活,可能很多同学都会想到桌子上堆得厚厚的书,黑板上的课程表和高考倒计时,还有那个可能再也没有机会和你在一个教室上课的,你喜欢了很久却一直没勇气告白的女同学。
不过若要说起对于当年的高三,小编印象最深的是什么,小编觉得大概就是那台学习机了吧。
若以当年的标准来看,那台机子的配置还算主流,1GHz的处理器,512MB的内存,8GB的存储空间,分辨率为800*600的8英寸电阻屏,Android 2.3.6系统。
这时可能有读者要吐槽了,活该小编你单身一辈子!高三有那么多美好的人和事,这么多年过去了,你竟然只记得你的学习机!
嗯,是的,可能你不知道,在班里所有人玩手机都要偷偷玩的时候,能在课桌上光明正大地玩一台安卓设备简直爽得上了天。
不过那台机子的体验放在今天来看可能并不好,首先,它是电阻屏,要操作它恐怕得使点劲儿,另外,它的系统总是感觉不太跟手,用过早些时候的Android系统的读者可能知道那种感觉,并不是卡,而是没有今天Android系统的这种程序一点即开,操作体验如丝般顺滑的感觉。
为什么当年的Android系统用着就是没有如今的流畅呢?原因之一,当年设备的硬件配置没有如今的好,不过今天,我们不妨换一个方向,从操作系统的角度来探讨这个问题。大家知道,Android应用是运行在虚拟机中的,那么今天,IT之家就和大家聊聊这个虚拟机。

Android中虚拟机的作用是什么呢?当然是运行Android应用程序,应用程序对于一款操作系统来讲至关重要,想想我们的日常,几乎每天都离不开应用程序,早上起床时,你需要闹钟应用,与家人和朋友沟通时,你需要即时通讯应用,白天看到好玩的,中午吃到好吃的,想要记录和分享它们,你需要相机应用,所以我们衡量一款操作系统,一个重要的指标就是这个平台上的应用的数量和质量如何,就像盖一栋房子一样,地基打得稳,却没有砖瓦,最后这栋房子肯定盖不起来。
Android诞生之初,可谓强者环伺,Windows Mobile和塞班如日中天,iOS的发展形式一片大好,为了在激烈的竞争中脱颖而出,也为了吸引越来越多的开发者,Android选择JAVA作为其应用程序的编程语言。
之所以选择JAVA,是因为这种编程语言已经为很多开发者所熟知,当开发者选择为安卓开发应用程序时,他们所面临的入门门槛将非常之低。
另外,JAVA具有跨平台的特性,和iPhone不同,搭载Android系统的手机多如繁星,它们搭载着不同品牌不同型号的处理器,而编程语言对平台支持的广泛即意味着Android系统对硬件选择的自由。
开发者使用JAVA语言在IDE里为Android平台写的代码叫做源码,这种源码是人类可以理解的语言,这种语言人类可以理解,但是机器无法理解,就像对一个意大利人说“люблютебя”,对一个美国人说“おはようございます”一样,你直接把源码告诉Android设备,让它执行,它肯定不会执行的,因为它听不懂啊~
所以,你需要将源码翻译成机器可以理解的机器码。不过这时问题来了,运行安卓系统的硬件五花八门,这部手机搭载的可能是高通的处理器,那部手机搭载的可能是英特尔处理器,你通过源码翻译成的机器码,高通处理器能看得懂,他执行了,英特尔处理器看不懂,他就会罢工。
没关系,我们可以先将源码翻译成字节码,字节码是一种中间码,它虽不能和手机的硬件层直接打交道,但是却可以被Android系统中的虚拟机所理解,当Android系统的虚拟机看到一段字节码后,它会根据设备硬件的不同而将字节码翻译成不同的硬件能够理解的机器码。
在Android 4.4之前,Android系统是让一种名叫Dalvik的虚拟机来充当翻译官的角色,当你将应用安装在手机上后,应用程序的代码将会以字节码保存,每次你冷启动一个应用时,Dalvik虚拟机便会将字节码翻译成机器码,然后交给硬件来执行。Dalvik虚拟机是个特别勤劳的家伙,它从来也不怕麻烦,每次你将一个应用关闭然后再次冷启动它时,Dalvik虚拟机就要再重复一次将字节码翻译成机器码的动作。
所以,你每次冷启动一个应用都要经过一次重新编译,在编译的这段时间你只能干等,或者欣赏Android系统的过场动画,或者摔掉手机。
虽然Dalvik虚拟机的辛劳让我们非常感动,不过我们不想在每次启动应用时都等上那么几秒或者几分钟,所以Dalvik,你是个好人,但是我们不合适,我们还是做朋友吧,友谊地久天长。
时代在发展,科技在进步,2013年,Android 4.4为我们带来了Dalvik虚拟机的替代者——ART虚拟机。
ART,全称为Android Runtime,翻译成中文则是安卓运行时,这个名字起得巧妙,因为英文中的“ART”正有“艺术”之意。
和Dalvik虚拟机一样,ART虚拟机的作用是将字节码翻译成机器码,不过,它们工作的方法不一样,相比于任劳任怨Dalvik虚拟机来说,ART虚拟机显然更加聪明。Dalvik虚拟机的做法是,你安装一个应用时,它对字节码不做处理,当你启动应用时,它才将字节码编译成机器码,这个我们前面讲过,而ART虚拟机的做法是什么呢?早在你安装应用时,它就将字节码编译为机器码,此后当你启动一个应用时,虚拟机无需对它重新进行编译,只要直接运行已经编译过的机器码即可,因此这时,你就可以更快地冷启动一个应用。
引援CSDN里的大神举的一个例子,Dalvik虚拟机就像是折叠自行车,想把它骑走你得先组装,ART虚拟机则相当于组装好的自行车,什么事儿也不用费,骑上了直接走人。
不过,任何事物都有它的两面性,ART不是完美无缺,Dalvik也不是一无是处。
通常情况下,机器码所占的存储空间会比字节码要大一点,你在Dalvik模式下安装一个应用,它所占的空间是50M,那在ART模式安装同样的应用,它所占的空间可能就是70M。
另外,在你ART模式下安装一个应用时,这个应用的字节码要被编译成机器码,这个编译需要一个过程,会花费一些时间,而你在Dalvik模式下安装一个应用时,其字节码并不需要被编译成机器码,因此,你在ART模式下安装应用更费时间,在Dalvik模式下安装应用则更省时间。
一句话概括,ART的路子无非就是和以空间换时间和时间转移。即通过直接运行占用存储空间更大但更高效的机器码来节约时间,和将打开应用所需的时间转移到安装应用这一步。
也许它们的缺点和优点并不是绝对的,我们可以试着把Dalvik虚拟机和ART虚拟机放在特定的历史环境中。
在Android使用Dalvik虚拟机的那个时代,安卓设备用于存储应用程序的空间往往很小,所以节省存储空间是最重要的,而到了Android使用ART虚拟机的时代,安卓设备用于存储应用程序的空间已经足够了,用户们可以追求更高的流畅度了,所以,应用程序占用多大的空间无所谓,运行效率够高,打开速度够快,运行起来够流畅即可。
有些人认为,Android 5.0萝莉炮是Android系统的里程碑,因为从Android 5.0开始,这个系统的UI设计团队总算是有些审美了,不过我认为,Android 4.4才是Android系统的里程碑,虽然它的UI设计和前一代相比并没有太大的变化,但是Android 4.4内在的提升是巨大的,在开发者选项中,Android 4.4对ART模式进行了大胆的探索,而正是这种探索,为今天流畅易用的Android系统铺平了道路。
以上就是今天关于Android的Dalvik虚拟机和ART虚拟机的探讨的全部内容。出于浅显易懂的原则,本文并没有对Android底层和硬件方面进行深入讨论,在撰写这篇文章时,笔者参考了维基百科和相关技术博客中的一些知识,若文中有定义错误或者事实错误,还请各位读者不吝赐教。
级别: 九滴秋露

UID: 103037
精华: 0
发帖: 15202
威望: 97907 点
无痕币: 5 WHB
贡献值: 0 点
在线时间: 6631(时)
注册时间: 2010-09-22
最后登录: 2024-03-19

了解了解了哦。
千山同一月 万户尽皆春 千江有水千江月 万里无云万里天
级别: 总版主

UID: 998
精华: 0
发帖: 604963
威望: 528524 点
无痕币: 3089 WHB
贡献值: 0 点
在线时间: 61684(时)
注册时间: 2008-12-25
最后登录: 2024-03-29

这个可以看看,了解一下。
级别: 六行秋雁
UID: 278546
精华: 0
发帖: 805
威望: 16807 点
无痕币: 19090 WHB
贡献值: 0 点
在线时间: 0(时)
注册时间: 2016-12-17
最后登录: 2020-01-13

谢谢版主!
级别: 十方秋水

UID: 88
精华: 0
发帖: 129700
威望: 220794 点
无痕币: 105768 WHB
贡献值: 0 点
在线时间: 51565(时)
注册时间: 2008-03-18
最后登录: 2024-03-29

了解一下。谢谢分享。
Total 0.046887(s) query 4, Time now is:03-29 14:07, Gzip enabled 粤ICP备07514325号-1
Powered by PHPWind v7.3.2 Certificate Code © 2003-13 秋无痕论坛