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 ...
随机推荐
- poj 3628 (搜索or背包)
好久没看背包题目了!!!生疏了!!!! 这题是背包题!!!不过对于这题,解决方法还是搜索省时!!! 题意:第一行给你一个N和VV,接下来N行,每行一个数,求得是任选N个数组合求和,求组合的和大于VV而 ...
- S2SH邮件注册激活后注册成功
首先我的思路是这样的:①接收从客户端接收过来的数据(密码,用户名,邮箱) ②将密码进行MD5加密,然后将信息用"_"连接起来(用于后面分解) ③将信息交个一个工具类中实现生成邮件信 ...
- btrace 笔记
转载请注明原链接地址 http://www.cnblogs.com/dongxiao-yang/p/6134393.html btrace 是一个可以不用重启线上java业务查问题的神器,记一下自己折 ...
- 在html使用a标签 直接下载图片 不通过后台实现直接下载
由于a标签在HTML中链接图片会被识别并打开到网页上 如果想下载这个图片的话 就需要连接到后台读取文件并生成一个头信息下载.不过可以先给a标签加上一个download属性即可直接下载了. <a ...
- Java中的Stringbuffer类解析
StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存 ...
- Kerberos认证流程详解
Kerberos是诞生于上个世纪90年代的计算机认证协议,被广泛应用于各大操作系统和Hadoop生态系统中.了解Kerberos认证的流程将有助于解决Hadoop集群中的安全配置过程中的问题.为此,本 ...
- CAS+SSO原理浅谈
http://www.cnblogs.com/yonsin/archive/2009/08/29/1556423.htmlSSO 是一个非常大的主题,我对这个主题有着深深的感受,自从广州 UserGr ...
- JSP http头消息
头 描述 Accept 指定MIME类型 Accept-Charset 编码,例如utf-8 Accept-Encoding 编码方式,例如使用gzip压缩 Accept-Language 语言,例如 ...
- shell 脚本执行日志通用模块
目标 实现记录SHELL执行的開始时间,结束时间.执行状态,错误信息等,以函数封装日志记录的方式,脚本调用函数 源代码 通用函数脚本program_log_new.sh function init_l ...
- CocoaPods导入第三方库头文件自动补齐
使用了一段时间CocoaPods来管理Objective-c的类库,方便了不少.但是有一个小问题,当我在xcode输入import关键字的时候,没有自动联想补齐代码的功能,需要手工敲全了文件名,难以适 ...