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. 图解MySQL索引:B-树(B+树)
  2. 【JavaSE04】Java中循环语句for,while,do···while
  3. ESP8266在线视频网址
  4. Eclipse系列的隐藏宝藏-2019年版
  5. 游戏美术是什么?真的有“钱”景吗?
  6. 对标小米!华为P50 Pro+将有望搭载液态镜头技术
  7. drools 7.x定时器
  8. redis key/value 前面出现\xac\xed\x00\x05t\x00\x06 已解决
  9. 塑胶产品规格书范本_塑胶产品结构设计--卡扣 - 范文中心
  10. 制作Windows severs 2019启动盘
  11. android textview 字体边框,为TextView添加一个边框的几种办法
  12. 第六章-2 CS创建监听与payload
  13. [问题]假定网络中的路由器B的路由表有如下的项目(这三列分别表示“目的网络”、“距离”和“下一跳路由器”):
  14. Tensorflow 笔记 XIV——生成式对抗网络:GAN 与 CGAN
  15. 去重用逗号隔开的字符串
  16. ssm+JSP计算机毕业设计游戏装备交易网站192yb【源码、程序、数据库、部署】
  17. 杉岩对象存储MOS双引擎,加速智能应用的助推器
  18. 整体大于各部分功能之和
  19. Android 十六进制颜色值转换成int类型值
  20. python 计算器 loop_Python 计算器

热门文章

  1. Python 批量采集 shopee 虾皮商品详情数据、多站点整站实时采集
  2. C语言一球从100米高度自由落下
  3. Google浏览器上传文件卡死状态问题解决方案
  4. Windows CE
  5. 2022-2028全球FAKRA射频连接器行业调研及趋势分析报告
  6. Chroma from Luma 预测方法总结
  7. HTML中 dt dl dd ul li 等标签 英语单词
  8. 问题 L: 梦回高中,再创辉煌
  9. 【送票福利】腾讯2019 TLC 众多技术大咖等你参会,早鸟票5折售卖中
  10. 微型计算机性价比,为高性价比游戏电脑找颗超值芯,锐龙5 5600X VS.酷睿i7-11700K...