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 ...
最新文章
- C# 导出EXCEL文件
- Qt修炼手册10_QTableWidget控件使用说明及实践
- matlab2012生成dll,64位win7下vc2010如何调用matlab2012a中生成的dll文件
- java中属性外部化_用Java可外部化
- 【Python学习】 - 如何在Spyder中弹出plot绘图窗口而不是在Console中绘图
- 基于SpringBoot+Vue开发的前后端分离博客项目-Java后端接口开发
- __try,__except,__finally,__leave
- java treemap lastkey,java.util.TreeMap.higherKey()方法实例
- Python抽象及异常处理
- linux多线程select定时器,linux使用select实现精肯定时器详解
- 世界是数字的读后感:
- 安卓加密软件_U盘或者文件夹加密
- 同比 数据模型 环比_同比环比累计
- 杰理之ANC降噪三种类型【篇】
- 那个卖了房子去大理的姑娘,4个月后又回来了
- IDEA配置JPBC
- Django中的Model(字段) - 第五轻柔的code - 博客园
- 知识图谱技术入门指引
- 输入框校验-vue页面中校验
- 【转】挖洞实战之信息泄露与前端加密
热门文章
- 谁能引领国内人工智能芯片产业突围?
- 哈尔滨理工大学第12届程序设计竞赛--ADK题
- 2021年安全员-A证-主要负责人(广东省)新版试题及安全员-A证-主要负责人(广东省)考试试卷
- 【比赛实战篇】智能算法赛:智慧海洋建设Top1方案代码
- Shell脚本的Sleep命令
- hadoop历史背景hdfs分布式文件系统hadoop的集群模式单机模式伪分布
- 一.统计学中常见的几种统计资料
- 福利篇 之 移动开发者福音。。。
- 300×400数控激光切割机XY工作台部件及单片机控制设计(论文+DWG图纸+任务书+调研报告+外文翻译……)
- iTunes Store:隐藏和取消隐藏已购项目