Android ART简介
一、 Android ART简介
- Android DEX/ODEX/OAT文件
.class文件:JVM虚拟机(Java VM)执行的字节码文件;
.dex文件:DVM虚拟机(Dalvik VM)执行的字节码文件;
.odex文件:.dex文件经过优化生成的字节码文件;
- oat文件:.dex文件经过dex2oat翻译生成的机器码。
1) .class文件与.dex文件的主要区别在于:.class文件只包含一个类,而.dex文件可以包含多个类。
我们编译生成的classes.dex文件还包含第三方jar包等。
2) (Android KK为例)USER Binary与ENG Binary的生成.odex文件区别:
USER版本的system分区:
在USER Binary中,.odex文件是在我们编译版本的时候生成的(并不是全部的apk都在编译时生成)。编译时将.dex优化生成.odex文件,我们可以看到生成.odex文件的apk中是没有.dex文件的。
下图是将LogsProvider.apk解压后的结果:
我们将Kies.apk解压后可以看到,还是包含.dex文件的(它对应的.odex文件会在烧完USER binary后第一次开机时生成在/data/dalvik-cache中,为什么不在编译时直接生成,以节省开机时间?):
ENG版本的system分区以及/data/dalvik-cache:(odex文件在ENG binary烧录完第一次开机时生成在/data/dalvik-cache)
3) (Android L)USER Binary与ENG Binary的生成OAT文件区别:
跟Android KK类似,USER binary在我们编译时就会将apk中的dex翻译成机器码。
以Telecom.apk为例,在Telecom/arm目录下有两个xz压缩文件 ,其中Telecom.odex.xz就是OAT机器码的压缩文件,Telecom.odex.art.xz文件目前不清楚细节。
所以,USER binary在烧完第一次开机时,只需解压缩xz文件到/data/dalvik-cache中:
ENG binary在烧完第一次开机时,会将apk中的dex文件翻译成OAT文件放到/data/dalvik-cache中:
这也是为什么Android L ENG binary比USER binary第一次启动时间长很多的原因。
2. Android Dalvik
Dalvik虚拟机是Goole设计用于Android平台的Java虚拟机,Dalvik虚拟机通过解释执行dex文件,每个应用程序都对应与一个单独的Dalvik虚拟机实例。Android L之前使用的虚拟机。
3. Android ART
ART(Android Runtime)是Android 4.4以后新增加的一种运行时,主要是为了提升Android系统的流畅性。Android 4.4默认采用Dalvik,可以更改为ART,从Android L(Android 5.0)默认采用ART。
4. ART相比Dalvik的优缺点
优点:我们知道Dalvik通过解释执行dex文件,而ART则直接执行机器码,ART的执行效率比Dalvik要高很多,提升了系统的流畅性(目前感觉性能提升不是很大);
缺点:ART执行的是机器码,通过前面的分析我们知道机器码大多在烧完binary第一次开机时,翻译dex文件生成,与Dalvik相比显然这会增加启动时间;另外ART执行的OAT文件(机器码)远比Dalvik虚拟机执行的dex文件要大,会增加系统system分区以及data分区占用的空间。
Android ART简介的更多相关文章
- JVM Davilk ART 简介 区别
JVM和DVM JavaSE 程序使用的虚拟机叫 Java Virtual Machine,简称 JVM.Android 平台虽然是使用java语言来开发应用程序,但Android程序却不是运行在标准 ...
- Android Studio 简介及导入 jar 包和第三方开源库方[转]
原文:http://blog.sina.com.cn/s/blog_693301190102v6au.html Android Studio 简介 几天前的晚上突然又想使用 Android Studi ...
- Android ART运行时与Dalvik虚拟机
这几天在做一个项目时需要在Android中使用OSGi框架(Apache Felix),于是在一个android 4.4.2 版本系统的某品牌的平板上实验. 实验内容很简单:把felix包里的feli ...
- "浅谈Android"第一篇:Android系统简介
近来,看了一本书,名字叫做<第一行代码>,是CSDN一名博主写的,一本Android入门级的书,比较适合新手.看了书之后,有感而发,想来进行Android开发已经有一年多了,但欠缺系统化的 ...
- 【译】Android系统简介—— Activity
续上一篇,继续介绍Android系统.上一篇: [译]Android系统简介 本文主要介绍构建Android应用的一些主要概念: Activity Activity是应用程序中一个单独的有UI的页面( ...
- 被遗忘的Android mipmaps简介
被遗忘的 Android mipmaps 简介 [导读]已经发布的 Android Studio1.1 版本是一个 bug 修复版本.在这个版本中,当你创建工程时一项改变将会吸引你的眼球.工程创建登陆 ...
- Android系统简介(中):系统架构
Android的系统架构栈分为4层,从上往下分别是Applications.Application framework.Libraries & Android Runtime.Linux ...
- Android系统简介(上):历史渊源
上个月,看到微信的一系列文章,讲到Linux的鼻祖-李纳斯的传记<Just for Fun>, 其人神乎其能, 其人生过程非常有趣,值得每个程序员细细品味. 而实际上,对我而已,虽然做软件 ...
- Android插件简介
/** * @actor Steffen.D * @time 2015.02.06 * @blog http://www.cnblogs.com/steffen */ Android插件简介 Andr ...
随机推荐
- JavaFX 3D部分介绍(3) Lights
声明: 本博客文章原创类别的均为个人原创,版权所有.转载请注明出处: http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com. ...
- .Net设计模式_工厂模式(1)
工厂模式有三个模式: 简单工厂(Simple Factory)模式 工厂方法(Factory Method)模式 抽象工厂(Abstract Factory)模式 1.简单工厂 引言: 我是消费者,我 ...
- Linux定时任务编写
由于需要定时备份数据库 我就在crontab -e中编写了这样的代码 十分钟备份一次 命名方式为年月日-时分秒.sql */10 * * * * /usr/bin/mysqldump -u root ...
- Android Butterknife框架配置
一.原理. 最近发现一个很好用的开源框架,蛮不错的,可以简化你的代码,是关于注解的.不多说直接进入使用步骤讲解. 二.步骤. 1.准备阶段,先到官网( http://jakewharton.githu ...
- Android.mk 的含义
LOCAL_PATH:=$(call my-dir) LOCAL_PATH是定义源文件在哪个目录用的. my-dir 是个定义的宏方法, $(call my-dir)就是调用这个叫 my-dir的宏方 ...
- 【转】java 解析 plist文件
为了方便的将spritesheet的图导入我自己的动画编辑器!我做了plist文件解析DOM解析比较麻烦 因为element getChildNodes 会获取到text对象.而这个对象可能是一个空白 ...
- PAT---1050. String Subtraction (20)
#include<iostream> #include<string.h> #include<stdio.h> using namespace std; #defi ...
- hdu2018java
母牛的故事 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- Android开发之ContentProvider(内容提供者)
1. ContentProvider简介 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据,但数据访问 ...
- as3 打开窗口类
package FlashCode.utils{ import flash.display.Sprite; import flash.net.URLRequest; import flash.net. ...