美文网首页jvm
Android虚拟机

Android虚拟机

作者: Heezier | 来源:发表于2021-05-10 06:03 被阅读0次

    Android虚拟机

    Android4.4以上开始使用ART虚拟机,在此之前我们一直使用的Dalvik虚拟机

    Dalvik

    1.Dalvik基本概念

    Dalvik虚拟机是Android程序的虚拟机,其指令集基于寄存器架构,执行其特有的文件格式——dex字节码,主要负责完成对象生命周期管理、堆栈管理、线程管理、安全异常管理、垃圾回收等重要功能。

    android使用的Java代码,跟Java 虚拟机类似,是Android中Java程序的运行基础。

    但是dalvik虚拟机与Java虚拟机有较大区别:

      1)、dalvik基于寄存器,而JVM基于stack
      2)、Dalvik执行的是特有的DEX文件格式,而JVM运行的是.class文件格式。
    

    优势:

      1)、在编译时提前优化代码而不是等到运行时
      2)、 虚拟机很小,使用的空间也小;被设计来满足可高效运行多种虚拟机实例。
      3)、常量池已被修改为只使用32位的索引,以 简化解释器
    

    2.Dalvik的模式

    Dalvik 虚拟机采用的是JIT(Just-In-Time)编译模式,意思为即时编译,我们知道apk被安装到手机中时,对应目录会有dex或odex和apk文件,apk文件存储的是资源文件,而dex或odex(经过优化后的dex文件内部存储class文件)内部存储class文件,每次运行app时虚拟机会将dex文件解释翻译成机器码,这样才算是本地可执行代码,之后被系统运行。

    Dalvik虚拟机可以看做是一个Java VM,他负责解释dex文件为机器码,如果我们不做处理的话,每次执行代码,都需要Dalvik将dex代码翻译为微处理器指令,然后交给系统处理,这样效率不高。为了解决这个问题,Google在2.2版本添加了JIT编译器,当App运行时,每当遇到一个新类,JIT编译器就会对这个类进行编译,经过编译后的代码,会被优化成相当精简的原生型指令码(即native code),这样在下次执行到相同逻辑的时候,速度就会更快。

    img

    ART

    ART 是一种执行效率更高且更省电的运行机制,执行的是本地机器码,这些本地机器码是从dex字节码转换而来。ART采用的是AOT(Ahead-Of-Time)编译,应用在第一次安装的时候,字节码就会预先编译成机器码存储在本地。在App运行时,ART模式就较Dalvik模式少了解释字节码的过程,所以App的运行效率会有所提高,占用内存也会相应减少。谷哥在5.0以后的Android版本中默认了ART模式启动,就是希望Android能摆脱卡顿这个毛病。

    img

    Android N的运作方式

    ART 使用预先 (AOT) 编译,并且从 Android N混合使用AOT编译,解释和JIT。

    1、最初安装应用时不进行任何 AOT 编译(安装又快了),运行过程中解释执行,对经常执行的方法进行JIT,经过 JIT 编译的方法将会记录到Profile配置文件中。

    2、当设备闲置和充电时,编译守护进程会运行,根据Profile文件对常用代码进行 AOT 编译。待下次运行时直接使用。

    image-20210510055620914

    参考文章:

    https://blog.csdn.net/DKBDKBDKB/article/details/110404742

    https://blog.csdn.net/wangwangli6/article/details/79813531

    相关文章

      网友评论

        本文标题:Android虚拟机

        本文链接:https://www.haomeiwen.com/subject/oisbdltx.html