1、ART之所以会比Dalvik快,是因为ART执行的是本地机器指令,而Dalvik执行的是Dex字节码,通过通过解释器执行。尽管Dalvik也会对频繁执行的代码进行JIT生成本地机器指令来执行,但毕竟在应用程序运行的过程中将Dex字节码翻译成本地机器机器指令也会影响到应用程序本身的执行,因此即使Dalvik使用了JIT,也在一定程度上也比不上直接就可以执行本地机器指令的运行时。

Zygote进程在启动的过程中,正是通过图1所示的接口创建Dalvik或者ART虚拟机的,这样看来,ART虽然执行的本地机器指令,但是它表面看来,又是一个不折不扣的虚拟机。也正是因为这样,ART才可以在不重新编译APK的基础上,直接可以加载和运行APK。这也是ART运行时可以无缝替换Dalvik运行时的原理。因此,我们就可以得出一个结论:ART是一个执行本地机器指令的虚拟机。这个结论似乎有点矛盾,既然是执行本地机器指令,为什么又称为虚拟机呢?从接下来的文章分析可以知道,ART除了实现Java虚拟机接口之外,其内部还有垃圾收集机制,同时还有Java核心类库调用。

上面提到,ART才可以在不重新编译APK的基础上,直接对其进行加载和运行,这是由于APK在安装时被执行了AOT。AOT(Ahead Of Time)是相对JIT(Just In Time)而言的。也就是在APK运行之前,就对其包含的Dex字节码进行翻译,得到对应的本地机器指令,于是就可以在运行时直接执行了。这种技术不但使得我们可以不对原有的APK作任何修改,还可以使得这些APK只需要在安装时翻译一次,就可以无数次以本地机器指令的形式运行。这种技术与我们用C/C++语言编写一个程序,然后用GCC编译得到一个可执行程序,最后这个可执行程序就可以无数次地加载到系统执行,是差不多的。

在ART中,打包在APK里面的Dex字节码是通过LLVM翻译成本地机器指令的。LLVM是一个用来快速开发自己的编译器的框架系统,

如果我们没有忘记,在Dalvik运行时中,APK在安装的时候,安装服务PackageManagerService会通过守护进程installd调用一个工具dexopt对打包在APK里面包含有Dex字节码的classes.dex进行优化,优化得到的文件保存在/data/dalvik-cache目录中,并且以.odex为后缀名,表示这是一个优化过的Dex文件。在ART运行时中,APK在安装的时候,同样安装服务PackageManagerService会通过守护进程installd调用另外一个工具dex2oat对打包在APK里面包含有Dex字节码进翻译。这个翻译器实际上就是基于LLVM架构实现的一个编译器,它的前端是一个Dex语法分析器。翻译后得到的是一个ELF格式的oat文件,这个oat文件同样是以.odex后缀结束,并且也是保存在/data/dalvik-cache目录中。

ART的运行原理都简要地介绍了,总结如下:

1. 在Android系统启动过程中创建的Zygote进程利用ART运行时导出的Java虚拟机接口创建ART虚拟机。

2. APK在安装的时候,打包在里面的classes.dex文件会被工具dex2oat翻译成本地机器指令,最终得到一个ELF格式的oat文件。

3. APK运行时,上述生成的oat文件会被加载到内存中,并且ART虚拟机可以通过里面的oatdata和oatexec段找到任意一个类的方法对应的本地机器指令来执行。

摘至:http://blog.csdn.net/luoshengyang/article/details/39256813

Android ART介绍相关推荐

  1. Android Art Hook 技术方案

    Android Art Hook 技术方案 by 低端码农 at 2015.4.13 www.im-boy.net 0x1 开始 Anddroid上的ART从5.0之后变成默认的选择,可见ART的重要 ...

  2. Android ART 分析

    对Android ART的分析,主要包括ART Runtime启动过程以及dex2oat的分析. 由于代码量较多,忽略了很多细节,所以分析过程会存在错误:ART Runtime采用单例模式,启动过程中 ...

  3. Android art模式解析

    Android art模式解析 本文主要针对android系统art模式下面从安装apk到运行apk的一个过程,主要有一下几个方面: Art虚拟机介绍 安装时dex文件转化为oat文件 oat文件对应 ...

  4. Android ART模式预优化那些事

    Android预优化那些事 Preopt ART Dalvik APK的预优化原理和作用 Android预优化那些事 1.什么是Android预优化 2.Android预优化的原理 3.Android ...

  5. android art虚拟机安装,Android中art虚拟机启动流程

    本文基于Android8.1系统进行研究 一.启动zygote 在Linux内核启动完成后,首先启动系统的第一个进程init进程 init进程会读取init.rc中的配置文件 其中有Zygote的配置 ...

  6. android AsyncTask介绍(转)

    android AsyncTask介绍 AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接 ...

  7. Android类库介绍

    Android类库介绍 GPhone开发包Android SDK含了很多丰富的类库: android.util 涉及系统底层的辅助类库 android.os 提供了系统服务.消息传输.IPC管道 an ...

  8. 1.android体系结构介绍

    一.Android的介绍 android介绍见百度百科:Android的介绍,度娘把Android介绍的这么清楚,如果谷歌是Android的爹,那度娘就是娘了. 二.Android的架构图 andro ...

  9. Android 系统优化(33)---Android ART GC之GrowForUtilization的分析

    Android ART GC之GrowForUtilization的分析 转载请注明来自 https://hello2mao.github.io Android运行过程中有多种情况会触发垃圾回收(GC ...

最新文章

  1. C# 导出EXCEL文件
  2. Qt修炼手册10_QTableWidget控件使用说明及实践
  3. matlab2012生成dll,64位win7下vc2010如何调用matlab2012a中生成的dll文件
  4. java中属性外部化_用Java可外部化
  5. 【Python学习】 - 如何在Spyder中弹出plot绘图窗口而不是在Console中绘图
  6. 基于SpringBoot+Vue开发的前后端分离博客项目-Java后端接口开发
  7. __try,__except,__finally,__leave
  8. java treemap lastkey,java.util.TreeMap.higherKey()方法实例
  9. Python抽象及异常处理
  10. linux多线程select定时器,linux使用select实现精肯定时器详解
  11. 世界是数字的读后感:
  12. 安卓加密软件_U盘或者文件夹加密
  13. 同比 数据模型 环比_同比环比累计
  14. 杰理之ANC降噪三种类型【篇】
  15. 那个卖了房子去大理的姑娘,4个月后又回来了
  16. IDEA配置JPBC
  17. Django中的Model(字段) - 第五轻柔的code - 博客园
  18. 知识图谱技术入门指引
  19. 输入框校验-vue页面中校验
  20. 【转】挖洞实战之信息泄露与前端加密

热门文章

  1. 谁能引领国内人工智能芯片产业突围?
  2. 哈尔滨理工大学第12届程序设计竞赛--ADK题
  3. 2021年安全员-A证-主要负责人(广东省)新版试题及安全员-A证-主要负责人(广东省)考试试卷
  4. 【比赛实战篇】智能算法赛:智慧海洋建设Top1方案代码
  5. Shell脚本的Sleep命令
  6. hadoop历史背景hdfs分布式文件系统hadoop的集群模式单机模式伪分布
  7. 一.统计学中常见的几种统计资料
  8. 福利篇 之 移动开发者福音。。。
  9. 300×400数控激光切割机XY工作台部件及单片机控制设计(论文+DWG图纸+任务书+调研报告+外文翻译……)
  10. iTunes Store:隐藏和取消隐藏已购项目