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

前言

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移动架构总群】:加入群聊

资料大全

猜你喜欢

转载自blog.csdn.net/weixin_43351655/article/details/88877777