Android ART介绍
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介绍相关推荐
- Android Art Hook 技术方案
Android Art Hook 技术方案 by 低端码农 at 2015.4.13 www.im-boy.net 0x1 开始 Anddroid上的ART从5.0之后变成默认的选择,可见ART的重要 ...
- Android ART 分析
对Android ART的分析,主要包括ART Runtime启动过程以及dex2oat的分析. 由于代码量较多,忽略了很多细节,所以分析过程会存在错误:ART Runtime采用单例模式,启动过程中 ...
- Android art模式解析
Android art模式解析 本文主要针对android系统art模式下面从安装apk到运行apk的一个过程,主要有一下几个方面: Art虚拟机介绍 安装时dex文件转化为oat文件 oat文件对应 ...
- Android ART模式预优化那些事
Android预优化那些事 Preopt ART Dalvik APK的预优化原理和作用 Android预优化那些事 1.什么是Android预优化 2.Android预优化的原理 3.Android ...
- android art虚拟机安装,Android中art虚拟机启动流程
本文基于Android8.1系统进行研究 一.启动zygote 在Linux内核启动完成后,首先启动系统的第一个进程init进程 init进程会读取init.rc中的配置文件 其中有Zygote的配置 ...
- android AsyncTask介绍(转)
android AsyncTask介绍 AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接 ...
- Android类库介绍
Android类库介绍 GPhone开发包Android SDK含了很多丰富的类库: android.util 涉及系统底层的辅助类库 android.os 提供了系统服务.消息传输.IPC管道 an ...
- 1.android体系结构介绍
一.Android的介绍 android介绍见百度百科:Android的介绍,度娘把Android介绍的这么清楚,如果谷歌是Android的爹,那度娘就是娘了. 二.Android的架构图 andro ...
- Android 系统优化(33)---Android ART GC之GrowForUtilization的分析
Android ART GC之GrowForUtilization的分析 转载请注明来自 https://hello2mao.github.io Android运行过程中有多种情况会触发垃圾回收(GC ...
最新文章
- 图解MySQL索引:B-树(B+树)
- 【JavaSE04】Java中循环语句for,while,do···while
- ESP8266在线视频网址
- Eclipse系列的隐藏宝藏-2019年版
- 游戏美术是什么?真的有“钱”景吗?
- 对标小米!华为P50 Pro+将有望搭载液态镜头技术
- drools 7.x定时器
- redis key/value 前面出现\xac\xed\x00\x05t\x00\x06 已解决
- 塑胶产品规格书范本_塑胶产品结构设计--卡扣 - 范文中心
- 制作Windows severs 2019启动盘
- android textview 字体边框,为TextView添加一个边框的几种办法
- 第六章-2 CS创建监听与payload
- [问题]假定网络中的路由器B的路由表有如下的项目(这三列分别表示“目的网络”、“距离”和“下一跳路由器”):
- Tensorflow 笔记 XIV——生成式对抗网络:GAN 与 CGAN
- 去重用逗号隔开的字符串
- ssm+JSP计算机毕业设计游戏装备交易网站192yb【源码、程序、数据库、部署】
- 杉岩对象存储MOS双引擎,加速智能应用的助推器
- 整体大于各部分功能之和
- Android 十六进制颜色值转换成int类型值
- python 计算器 loop_Python 计算器
热门文章
- Python 批量采集 shopee 虾皮商品详情数据、多站点整站实时采集
- C语言一球从100米高度自由落下
- Google浏览器上传文件卡死状态问题解决方案
- Windows CE
- 2022-2028全球FAKRA射频连接器行业调研及趋势分析报告
- Chroma from Luma 预测方法总结
- HTML中 dt dl dd ul li 等标签 英语单词
- 问题 L: 梦回高中,再创辉煌
- 【送票福利】腾讯2019 TLC 众多技术大咖等你参会,早鸟票5折售卖中
- 微型计算机性价比,为高性价比游戏电脑找颗超值芯,锐龙5 5600X VS.酷睿i7-11700K...