首页系统综合问题硬核讲解:“Android 虚拟机”的前世今生

硬核讲解:“Android 虚拟机”的前世今生

时间2023-04-17 05:38:13发布分享专员分类系统综合问题浏览190

今天小编给各位分享安卓虚拟机的知识,文中也会对其通过硬核讲解:“Android 虚拟机”的前世今生和安卓和ios最本质的区别是什么?等多篇文章进行知识讲解,如果文章内容对您有帮助,别忘了关注本站,现在进入正文!

内容导航:

  • 硬核讲解:“Android 虚拟机”的前世今生
  • 安卓和ios最本质的区别是什么?
  • 学习Android 开发,有什么书籍值得推荐
  • android auto不能创建虚拟机
  • 一、硬核讲解:“Android 虚拟机”的前世今生

    前言

    我进入 Androird 行业也有一段时间,目前负责项目开发方面的工作,难免会用到虚拟机实现代码运行,最近我也一直在思考,虚拟机是以哪种方式实现的,底层逻辑又是怎样的?于是在网上查阅了相关的资料,结合自身的见解,将之整合在了一起,接下来我们就来了解一下虚拟机的相关知识

    虚拟机的前身

    ● 众所周知,Android 最开始面世时,使用的开发语言是 Java,而 Java 是运行在 Java 虚拟机上的即 JVM;那么为什么 Google 要单独设计一套新的 Dalvik 虚拟机来执行 Android 程序呢?

    ● 可能是为了解决移动端设备上软件运行效率问题,可能是 JVM 虚拟机无法满足当时移动端的使用场景,也可能是为了规避与 Oracle 公司的版权纠纷问题,最终 Google 专门为 Android 平台设计了一套虚拟机来运行 Android 程序,它就是 Dalvik Virtual Machine(Dalvik 虚拟机)

    ● 随着 Android 发展至今,虽然目前开发 Android 程序的语言已经越来越多样性,如 Java,Kotlin,Dart,Flutter 等等,但无论使用哪种语言开发 Android,最终都需要运行在虚拟机上,本篇文章将站在 Android 虚拟机的视角来分析 Android 程序的运行原理

    Dalvik 虚拟机概述及特点

    Google 于 2007 年底正式发布了 Android SDK, Dalvik 虚拟机也正式进入我们的视野,而 Dalvik 命名的由来是取至其作者 丹·伯恩斯坦(Dan Bornstein) 曾居住过一个名叫 Dalvik 的小渔村

    Dalvik 虚拟机作为 Android 平台的核心组件,拥有如下几个特点

    ● 体积小,占用内存空间小

    ● 专有的 DEX 可执行文件格式,体积更小,执行效率更快

    ● 常量池采用 32 位索引值,寻址类方法名、字段名、常量更快

    ● 基于寄存器架构,并拥有一套完整的的指令系统

    ● 提供了对象生命周期管理、堆栈管理、线程管理、安全和异常管理以及垃圾回收等重要功能

    所有的 Android 程序都运行在 Android 系统进程里,每个进程对应着一个 Dalvik 虚拟机实例

    Java 虚拟机概述及特点

    JVM 是 Java Virtual Machine(Java虚拟机)的缩写,是 JRE 的一部分;它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM 有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统;Java 虚拟机 JVM 是属于 JRE 的,而现在我们安装 JDK 时也附带安装了 JRE (当然也可以单独安装JRE)

    JVM 拥有如下几个特点

    ● JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行

    ● Java虚拟机实例负责运行一个Java程序,当启动一个Java程序时,一个虚拟机实例就诞生了。当程序结束,这个虚拟机实例也就消亡。在 Java虚拟机规范中,一个虚拟机实例的行为是分别按照子系统、内存区、数据类型和指令来描述的,这些组成部分一起展示了抽象的虚拟机的内部体系结构

    ● 作为一种编程语言的虚拟机,实际上不只是专用于Java语言,只要生成的编译文件匹配JVM对载入编译文件格式要求,任何语言都可以由JVM编译运行

    Java虚拟机与Java语言并没有必然的联系,他只与特定的二进制文件格式—Class文件格式所关联,Class文件中包含了Java虚拟机指令集(或者称为字节码,Bytecodes)和符号表,还有一些其他辅助信息

    Dalvik 虚拟机与 Java 虚拟机的区别

    从 Dalvik 虚拟机的特点我们可以看出 Dalvik VM 和 JVM 还是有许多的不同点的,两者并不兼容,他们显著的不同点主要有以下几个方面:

    Java 虚拟机运行的是 Java 字节码,Dalvik 虚拟机运行的是 Dalvik 字节码; 传统的 Java 程序经过编译,生成 Java 字节码保存在 .class 文件中,Java 虚拟机通过解码 .class 文件中的内容来运行程序

    而 Dalvik 虚拟机运行的是 Dalvik 字节码,所有的 Dalvik 字节码由 Java 字节码转换而来,并被打包到一个 DEX(Dalvik Executable) 的执行的文件中,Dalvik 虚拟机通过解释 DEX 文件来执行这些字节码

    总结

    本质上,Dalvik也是一个Java虚拟机;但它特别之处在于没有使用JVM规范;大多数Java虚拟机都是基于栈的结构,而Dalvik虚拟机则是基于寄存器。基于栈的指令很紧凑

    例如,Java虚拟机使用的指令只占一个字节,因而称为字节码;基于寄存器的指令由于需要指定源地址和目标地址,因此需要占用更多的指令空间

    Dalvik虚拟机的某些指令需要占用两个字节,基于栈和基于寄存器的指令集各有优劣;一般而言,执行同样的功能,前者需要更多的指令(主要是load和store指令),而后者需要更多的指令空间;需要更多指令意味着要多占用CPU时间,而需要更多指令空间意味着数据缓冲(d-cache)更易失效

    Android架构师之路还很漫长,与君共勉

    PS:有问题欢迎指正,欢迎大家点赞评论,可以在评论区留下你的建议和感受

    一、安卓和ios最本质的区别是什么?

    优先级别不同:iOS最先响应屏幕
      当使用iOS或者是Android手机时,第一步就是滑屏解锁找到相应程序点击进入。而这个时候往往是所有操控开始的第一步骤,iOS系统产品就表现出来了流畅的一面,但Android产品却给人一种卡顿的现象,更别说后续深入玩游戏或者进行其它操控了。这是为什么?
      其实这与两个系统的优先级有关,iOS对屏幕反应的优先级是最高的,它的响应顺序依次为Touch–Media–Service–Core架构,换句话说当用户只要触摸接触了屏幕之后,系统就会最优先去处理屏幕显示也就是Touch这个层级,然后才是媒体(Media),服务(Service)以及Core架构。而Android系统的优先级响应层级则是Application–Framework–Library–Kernal架构,和显示相关的图形图像处理这一部分属于Library,可以看到到第三位才是它,当触摸屏幕之后Android系统首先会激活应用,框架然后才是屏幕最后是核心架构。

      iOS系统优先处理Touch层级(图片来自网络)
      可以看到优先级的不同导致了iOS产品以及Android手机在操控过程中的表现差异,当滑动屏幕进行操控的时候,iOS系统会优先处理Touch层级,而Android系统则是第三个才响应Library层级,这是造成它们流畅度不同的因素之一。不过优先级对系统流畅性有有影响不假,但并不是最绝对的,造成两系统之间流畅性不一的现象还有其它因素,可以接着往下看。
      硬件工作配置不同:iOS基于GPU加速
      目前智能手机硬件装备竞赛当中,其实处理器等配置已经达到了一个瓶颈期,各大旗舰产品在硬件比拼当中基本上没有太大的区别,而这时候GPU就成为了一个凸显差异的重要因素。一些大型软件像是3D游戏对GPU性能要求都会比较高,苹果iPhone产品采用的Power VR SGX系列GPU在当下来说非常的主流,跑分测试数据证明了它并不会比一些旗舰级别的Android产品差劲。

      A6处理器集成了Power VR SGX543显示芯片(图片来自网络)
      而iOS系统对图形的各种特效处理基本上正好都是基于GPU硬件进行加速的,它可以不用完全借助CPU或者程序本身,而是通过GPU进行渲染以达到更流畅的操控表现。但是Android系统产品则并非如此,因为Android需要适应不同的手机硬件,需要满足各种差异配置,所以很多图形特效大多都要靠程序本身进行加速和渲染,并严重依赖CPU运算的操作自然会加大处理器的负荷,从而出现卡顿的问题。虽然Android 4.0以及4.1等更高版本中进行了改进将硬件加速设为默认开启,但依旧无法做到所有特效全部都靠GPU进行加速。在很多Android手机里面都自带有“是否开启GPU渲染”这个功能选项,不过开启之后的改善也是微乎其微。

      iOS图形特效基于GPU加速渲染
      屏幕最先响应的优先级关系,再加上iSO本身GPU加速程序的特性,使得大家在操控过程中感觉iOS手机拥有着不错的流畅性。因为它本身的整个流程都是在为最大化的流畅做服务,不管是第一印象的滑动接触屏幕,还是进一步使用程序之后的更深层操作都是如此。而GPU加速这点特性,应该是它优于Android系统流畅性的又一个因素。
      开发机制不同:安卓机制效率低
      Android的编程语言是JAVA,而iOS的则为Objective-C,不过要是说Android系统之所以有些卡顿是因为JAVA开发语言的关系,或者是拿它和Objective-C对比肯定会有人提出质疑。Objective-C的优势是效率高但比较“唯一”,而JAVA的优势则是跨平台不过运行效率相对偏低,其实这两个编程语言所带来的机制不同,就已经造成了各自系统之间的流畅性差异化。

      Android系统架构(图片来自网络)
      iOS的Objective-C,编译器gcc,而这个gcc编译出来的代码又被苹果专为iOS架构优化到了极致,运行过程中也不需要虚拟机在中间插手,执行效率自然很高–引自网络。这一段话应该是iOS系统本身运行程序的执行过程,而Android是通过JAVA虚拟机来执行,并且系统需要占用大量内存来换取执行速度,再加上不定期的内存自动回收机制,从而直接导致了卡顿现象的出现。

      iOS系统架构有着不错的运行效率
      Android的JAVA编程本身运行效率比Objective-C低一些,而且再加上内存自动回收的机制,所以造成了一些卡顿不流畅的现象出现。但根据技术人员讲解,现代的JAVA虚拟机效率已经不再是最大的瓶颈,Android 4.0系统版本之后的卡顿现象明显得到了改善,所以这也是有用户并没有发现自己新买的Android手机出现太多卡顿现象的原因。看来编程语言和机制已经被Android进行了改善,这同样也不是造成它与iOS流畅性偏差的唯一因素,不过影响却是实实在在存在着。

    二、学习Android 开发,有什么书籍值得推荐

    一、《深入理解Android内核设计思想(第2版)(上下册)》
    本书既适合Android系统工程师,也适合于应用开发工程师来阅读,从而提升Android开发能力。读者可以在本书潜移默化的学习过程中更深刻地理解Android系统,并将所学知识自然地应用到实际开发难题的解决中。
    二、《Android Studio应用开发实战详解》
    本书适合Android初级读者、Android应用开发人员、Android爱好者、Android Studio开发人员、Android智能家居、Android可穿戴设备研发人员学习,也可以作为相关培训学校和大专院校相关专业的教学用书。
    三、《深入解析Android 虚拟机》
    本书几乎涵盖了Dalvik VM系统的所有主要内容,并且讲解方法通俗易懂,特别有利于读者学习并消化。
    四、《Android传感器开发与智能设备案例实战》
    本书几乎涵盖了Android传感器和外设开发所需的所有主要内容,讲解方法通俗易懂。
    五、《构建安全的Android App》
    本书介绍了主流的Android安全技术开发的方法,并把此方法应用在整个Android应用开发的代码里。
    六、《Android 应用测试指南》
    《Android应用测试指南》是一本移动测试实用工具书。本书针对当前流行的技术、框架和工程质量改进工具进行了介绍,一步一步清晰地指导大家如何去写应用程序的测试用例,利用各种测试手段来保证Android项目质量。
    七、《精通Android网络开发》
    本书几乎涵盖了Android网络应用中的所有主要内容,讲解方法通俗易懂。

    三、android auto不能创建虚拟机

    是的。
    Android模拟器创建不了通常是因为SDK无法更新导致,由于国内网络问题,无法访问google,ADT 及SDK都无法更新,所以无法创建模拟器。
    《深入解析 Android 虚拟机》,Android 系统从诞生到现在的短短几年时间里,凭借其易用性和开发的简洁性,赢得了广大开发 者的支持。在整个 Android 系统中,Dalvik VM 一直是贯穿从底层内核到高层应用开发的核心。本书循序渐进地讲解了 Android 虚拟机系统的基本知识,并剖析了其整个内存系统的进程和运作流程,并对虚拟机系统优化和异常处理的知识进行了详细讲解。本书几乎涵盖了 Dalvik VM 系统的所有主要内容,并且讲解方法通俗易懂,特别有利于读者学习并消化。

    关于安卓虚拟机的问题,通过《学习Android 开发,有什么书籍值得推荐》、《android auto不能创建虚拟机》等文章的解答希望已经帮助到您了!如您想了解更多关于安卓虚拟机的相关信息,请到本站进行查找!

    爱资源吧版权声明:以上文中内容来自网络,如有侵权请联系删除,谢谢。

    安卓虚拟机
    确立绩效考核目标应从以下几个方面考虑 「单词积累」confidence 牛津必修1U1 人教必修4U3