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运行时无缝替换Dalvik虚拟机的过程分析

    Android ART运行时无缝替换Dalvik虚拟机的过程分析 分类: Android2014-01-13 00:59 42722人阅读 评论(66) 收藏 举报 AndroidARTDalvikV ...

  2. Android平台介绍

    一.Android平台介绍 什么是智能手机 具有独立的操作系统,独立的运行空间,可以由用户自行安装软件.游戏.导航等第三方应用程序,并可以通过移动通讯网络来实现无线网络接入的手机类型总称. 智能手机操 ...

  3. android Animation介绍

    Animation介绍: 在Android SDK介绍了2种Animation模式: 1. Tween Animation:间动画,通过对场景里的对象不断做图像变换(平移.缩放.旋转)产生动画效果,即 ...

  4. Android ART运行时与Dalvik虚拟机

    这几天在做一个项目时需要在Android中使用OSGi框架(Apache Felix),于是在一个android 4.4.2 版本系统的某品牌的平板上实验. 实验内容很简单:把felix包里的feli ...

  5. android AsyncTask介绍(转)

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

  6. Android monkey介绍

    Android monkey介绍 原文地址 1 简略 monkey是android下自动化测试比较重要的的一个工具,该工具可以运行在host端或者设备(模拟器或真实设备).它会向系统发送随机事件流(即 ...

  7. [Learn Android Studio 汉化教程]第一章 : Android Studio 介绍

    注:为了看上去比较清晰这里只转载了中文 原地址:  [Learn Android Studio 汉化教程]第一章 : Android Studio 介绍 本章将引导您完成安装和设置开发环境,然后你就可 ...

  8. 【转】Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析

    原文网址:http://blog.csdn.net/xubin341719/article/details/38584469 关键词:蓝牙blueZ  A2DP.SINK.sink_connect.s ...

  9. Android ART简介

    一.    Android ART简介 Android DEX/ODEX/OAT文件

随机推荐

  1. Dependent Parameters in Concurrent Program using Special Value Set

    Dependent Parameters in Oracle Applications Requirement: Say there is a concurrent program that lets ...

  2. 使用moment.js管理时间

    如果在nodejs下 npm install moment 引用模块: var moment = require('moment'); 用法: 当前时间:2015-11-07 18:00:51 mom ...

  3. Netty游戏服务器之五Unity3d登陆消息

    今天我们来讲客户端Unity和服务器收发消息的具体过程. 首先,我们要在unity上搭建登陆界面的UI,这里呢,我用的是NGUI插件. 相信做过unity3d前端的都对这个非常的熟悉,最近官方的UGU ...

  4. jquery的表单验证方法,一个function能不能同时捕捉点击事件和按键事件?能不能再优化下,有代码。

    // 该jquery扩展引自 http://www.ghostsf.com/tools/389.html 方法名是作者博客的命名 $.fn.ghostsf_serialize = function ( ...

  5. Storm应用系列之——集成Kafka

    本文系原创系列,转载请注明. 原帖地址:http://blog.csdn.net/xeseo 前言 在前面Storm系列之——基本概念一文中,提到过Storm的Spout应该是源源不断的取数据,不能间 ...

  6. Java自定义注解基础知识

    注解分为三类:没有任何元素的注解,有一个元素的注解和有多个元素的注解. 1. Marker注解 这类注解没有任何元素,此类注解仅仅是一个标示.如下所示: public @interface Good ...

  7. 利用SmtpClient发送邮件

    1  163邮箱 HOST:smtp.163.com public static string CreateTimeoutTestMessage(string server) { string Suc ...

  8. Hooops - iPhone上的Dribbble应用

    来源:GBin1.com Dribbble一直没有一个官方的应用,有时候这真的很恶心.有时你远离电脑,却想浏览一些镜头来寻找灵感.对于那些喜欢Dribbble自然,充满原始感觉的人们,非常幸运的,可以 ...

  9. 算法笔记_076:蓝桥杯练习 结点选择(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 有一棵 n 个节点的树,树上每个节点都有一个正整数权值.如果一个点被选择了,那么在树上和它相邻的点都不能被选择.求选出的点的权值和最大是多 ...

  10. spring cloud jackson 枚举json互转 枚举json序列化/反序列化

    先定义一个枚举基类 import com.fasterxml.jackson.databind.annotation.JsonDeserialize; @JsonDeserialize(using = ...