• Android Runtime (ART) 和 Dalvik


    虽然Android应用大多用Java/Kotlin编写,但是实际上Android虚拟机并不使用JVM字节码,而是将Class文件通过DX编译器(现已换成D8)编译为更加紧凑的dex文件,然后由虚拟机执行。

    最开始的Android虚拟机是Dalvik,ART虚拟机由Android4.4被引入成为可选项,在Android5.0之后替换掉了Dalvik,并且在Android7.0和8.0分别进行了一系列改动。

    Android Runtime (ART) 和 Dalvik | Android 开源项目 | Android Open Source Project

    Android Runtime (ART) 和 Dalvik - mdnice 墨滴

    Dalvik是Google公司自己设计用于Android平台的虚拟机。Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为 .dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且 [1] 每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。

    Android runtime 播报 编辑 讨论 上传视频 应用运行时可实现预编译过程的运行环境 ART 的机制与 Dalvik 不同。在Dalvik下,应用每次运行的时候,字节码都需要通过即时编译器转换为机器码,这会拖慢应用的运行效率,而在ART 环境中,应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用。这个过程叫做预编译(AOT,Ahead-Of-Time)。这样的话,应用的启动(首次)和执行都会变得更加快速。

    基本概念和名词

    • .dex文件:App所有java源代码编译后生成众多class文件,由DX/D8,编译为一个/多个(multiDex)dex文件,由Android虚拟机编译执行
    • .odex文件:dex文件经过验证和优化后的产物,art下的odex文件包含经过AOT编译后的代码以及dex的完整内容,但Android8.0之后odex中的dex内容移动到了.vdex文件
    • .art文件:art下根据配置文件生成odex文件时同时生成.art文件,主要是为了提升运行时加载odex中热点代码的速度,包含了类信息和odex中热点方法的索引,运行App时会首先根据这个文件来加载odex中已经编译过的代码
    • 解释器(Interpreter):用于程序运行时对代码进行逐行解释,翻译成对应平台的机器码执行
    • JIT编译(Just In Time):由于解释器方式运行太慢引入,对于**频繁运行的热点代码(判定标准一般是在某个时间段内执行次数达到某个阈值)进行实时编译(在ART下以方法为粒度)执行,并且缓存JIT编译后的代码在内存中用于下次执行。由于以方法为粒度(ArtMethod)**进行编译,JIT编较于解释器可以生成效率更高的代码,运行更快。
    • AOT编译(Ahead-Of-Time):应用安装时全量编译所有代码为本地机器码,运行时直接执行机器码。
  • 相关阅读:
    【全志T113-S3_100ask】7-编译Tina系统初体验
    企业架构LNMP学习笔记13
    反序列化漏洞(4), phar文件反序列化, 漏洞实验, 漏洞利用
    每日一题:如何实现上拉加载,下拉刷新?
    [动态规划] (十二) 简单多状态 LeetCode 213.打家劫舍II
    [手写spring](4)实现后置处理器
    待学知识点
    剑指offer——JZ25 合并两个排序的链表 解题思路与具体代码【C++】
    基于ISO13400 (DoIP) 实现车辆刷写
    单机多GPU训练模型入门指南(torch.nn.DataParallel)
  • 原文地址:https://blog.csdn.net/weixin_44008788/article/details/128003498