Android面试集锦系列(19)——ART & Dalvik

作者 : 开心源码 本文共1449个字,预计阅读时间需要4分钟 发布时间: 2022-05-12 共189人阅读

前言

Android的每次版本更新都会带来少量改变,有些改变对于应用开发者来说并没有什么影响,但对于少量重大的改变,我认为Android开发是必要关注和理解一下的,有些改变也许会成为以后的Android进化方向。

面试时,我也比较喜欢问少量每个版本的不同之外,或者者问问对方喜欢哪个新版本的特性(如Android 7.0的新特性)。假如比较理解每个版本的不同之外,一般来说都是实践经验比较丰富的,很多都是踩过坑的。而对新版本能否关注,其实也是一个检测一个人的学习热情最好的题目,兴趣是最好的老师,对Android有热情的人很容易从各种途径获知相关的资讯。而没有兴趣的人,仿佛与世无争,只需还能用原来的方式写代码就感觉没有学习新东西的必要。

如,ART和Dalvik,对于应用开发者来说是无缝过渡的,那么你不奇怪Google是怎样做到的吗?

面试题:知道什么是ART吗?它和Dalvik有什么区别?

我们知道到,计算机只能识别机器码,而Java的运行是将class字节码在JVM上进行解析最后再翻译成机器码执行。Dalvik虚拟机就是针对Android应用(.dex)的一个JVM,尽管他们实现和原理有很多不同,但我们可以简单这样了解。

每个应用的进程中都会有一个Dalvik虚拟机实例,它们是相互独立的,一个应用的Dalvik虚拟机Crash了并不影响其余的。APK应用在运行时,就需要Dalvik虚拟机去加载类并转化成机器码执行,这个过程就是JIT(Just-In-Time),尽管dex经过优化会生成一个odex文件,但这个过程依然是运行时让编译器去解释字节码,相当于多了一道转换工序,对性能的影响不小。

在Android 4.4的版本里客户还可以选择是用Dalvik还是ART,而5.0后的版本直接换成了ART,把Dalvik删除了。

而ART(Android runtime)和Dalvik不一样的地方,就是想法去掉了中间解释字节码的过程,Dalvik是JIT的机制,与JIT相对的是AOT(Ahead-Of-Time),它发生在程序运行之前。如我们用静态语言(例如C/C++)来开发应用程序的时候,编译器直接就把它们翻译成目标机器码。这种静态语言的编译方式也是AOT的一种。

但是很多Android应用开发者并不知道有ART的存在,由于ART虚拟机并不要求开发者将自己的应用直接编译成目标机器码,而是在应用安装时由ART将应用的dex字节码翻译成本地机器码。所以你会发现,新的版本安装应用的时间比之前要长一点。

小结

关于ART方面,我也没有深入研究,有些东西的确是需要兴趣或者者压力才能深入进去的。我们在应用层上开发,基本上也很少涉及Framework层以下的修改,但是我们肯定要改变少量想法,如感觉和我们无关的就不舍得花时间看一看,而后故步自封偏安一隅。你不看清楚外面的东西,怎样确认和你有没有关呢?

最后

在这里我总结出了互联网公司Android程序员面试简历模板,面试涉及到的绝大部分面试题及答案做成了文档和架构视频资料免费分享给大家【包括高级UI、性能优化、架构师课程、NDK、Kotlin、混合式开发(ReactNative+Weex)、Flutter等架构技术资料】,希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

资料获取方式:加入Android架构交流QQ群聊:513088520 ,进群即领取资料!!!

点击链接加入群聊【Android移动架构总群】:加入群聊

资料大全

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Android面试集锦系列(19)——ART & Dalvik

发表回复