转自:http://www.2cto.com/kf/201401/270288.html
一、Android系统性能提升之路
Dalvik虚拟机作为Android平台的核心组成部分之一,允许在有限的内存资源中同时运行多个虚拟机实例。Dalvik虚拟机通过以下方式提升性能:
1、DEX代码安装时或第一次动态加载时odex化处理。
2、Android2.2版本提供了JIT机制提升性能,号称性能提升3~5倍。
3、提升硬件配置,如更多核CPU、更高频率CPU、更大的RAM等。
但是Android的系统流畅度与IOS系统还是有一定得差距。Android代码必须运行在Dalvik虚拟机上,而IOS直接是本地代码,性能差距也在情理之中。如果Android系统想拥有与IOS系统相同的系统性能。Dalvik虚拟机运行机制就成为Android系统性能提升唯一的障碍。
Android Kitkat 提供了一种与Dalvik截然不同的运行环境-ART(Android Runtime)的支持。目前用户可以选择设备的运行环境,在不久的将来ART肯定会替代Dalvik Runtime。
二、Dalvik vs ART
Dalvik运行环境使用JIT(Just-In-Time)来进行转译,应用每次运行的时候,字节码都需要通过JIT转换为机器码,这会拖慢应用的运行效率。而ART则是使用AOT进行处理(Ahead-Of-Time),并会在应用程序安装完毕时,进行预先的基础性编译作业,这就减去了JIT运行时的机器码转化时间,应用的启动和执行都会变得更加快速。
ART优点:
1、系统性能的显著提升。
2、应用启动更快、运行更快、体验更流畅、触感反馈更及时。
3、更长的电池续航能力。
4、支持更低的硬件。
ART缺点:
1、更大的存储空间占用,可能会增加10%-20%。
2、更长的应用安装时间。
总的来说ART的功效就是“空间换时间”。
三、初步感知ART
1、设备如何选择ART运行环境
通过以下步骤开启:设置→关于手机→点击最下面的版本号7次→开发者模式出现→返回→进入开发者模式,然后选择runtime-使用ART
目前官方Android模拟器并不能开启ART模式,可以通过该网址下载支持ART模式的Android模拟器镜像 ( http://blog.csdn.net/coolypf/article/details/17069015)
2、Dalvik切换ART后系统变化
2.1、应用安装时采用的代码优化方式不同:
Dalvik Runtime : dex2opt(http://124.16.139.131:24080/lxr/source/dalvik/dexopt/OptMain.cpp?v=android-4.0.4#f_OptMain.cpp)
ART Runtime : dex2oat (https://android.googlesource.com/platform/art/+/kitkat-release/dex2oat/dex2oat.cc)
2.2、优化后的文件大小及格式不同:
两个运行环境产生的优化代码路径及文件名都为:/data/dalvik-cache/app/data@app@{package name}.apk@classes.dex
ART环境产生的优化代码文件大小明显比Dalvik环境产生大:
虽然都为.dex文件结尾,但是文件格式却是天壤之别:
ART环境文件格式:ELF Shared Object
Dalvik环境文件格式:
三、ART相关源代码
ART相关源代码下载地址:(https://android.googlesource.com/platform/art/+archive/kitkat-release.tar.gz)
从源代码文件目录名称可以很清楚的了解各文件夹中相关文件的功能,我们最关心的主要有compiler、dex2oat、runtime三个文件夹:
compiler:主要负责Dalvik字节码到本地代码的转换,编译为libart-compiler.so
dex2oat :完成DEX文件到ELF文件转换。编译为dex2oat
runtime :Android ART运行时源代码,编译为libart.so
四、dex2oat优化流程
在应用安装时,installd通过dex2oat优化APK安装包classes.dex的Dalvik字节码为本地机器代码。整个优化为:
更多LLVM编译器的信息可查看:
http://llvm.org/
http://www.ibm.com/developerworks/cn/opensource/os-createcompilerllvm1/
http://www.chinaicexpo.com/market/1104-llvm.html
五、OAT文件格式
OAT文件其实就是基于ELF格式的一种私有文件格式。
OAT的ELF 段信息:
OAT的ELF export信息:
OAT文件加载流程,通过分析ART相关源码,当通过DexClassLoader加载一个OAT文件基本流程如下:
1、读取oatdata符号地址获取Oat数据 startAddress。
2、读取oatlastword符号地址获取OAT数据 endAddress。
3、通过startAddress和endAddress定位Oat数据。
4、解析Oat数据。构建方法定位所需数据结构。
然后就可以调用加载OAT文件的代码了。
整个的方法定位过程和Dalvik运行环境没有太大区别,读者可以通过(http://blog.csdn.net/androidsecurity/article/details/8664778)来了解如何定位到一个类的某个方法。
您可以简单的认为ART和Dalvik区别就是:Dalvik定位到的方法是Davlik字节码,但是ART定位到的方法是本地代码。仅是方法代码内容发生了变化,但是方法的定位过程基本相同。
我们以关键的地址点为分割截取OAT文件数据段:
ELF头:
OAT数据内容开始:(注意0x10BB位置,DexHeader开始)
可执行本地代码部分:
OAT数据结束位置:
具体的OAT文件格式可以查看源代码。
相关推荐
《Android核心机制深入分析》是针对Android系统内部工作原理的一篇详尽研究,旨在帮助开发者深化对Android系统核心机制的理解。这份PDF文档由TerryLog的分析整理而成,涵盖了Android的多个关键层面,包括但不限于...
### Android提高篇机制分析 #### 一、设计方法论探讨之设计意图 在探索Android复杂的内部运作时,首要任务是从宏观角度理解其设计理念与架构。本文档试图从设计师的角度出发,探讨Android系统的构建思路。 ##### ...
"android-art-res"项目就是一个专注于Android系统艺术研究的开源资源,它包含了对Android运行时环境(ART)以及资源处理机制的深入探索。这个压缩包文件“android-art-res-master”就是这个项目的源代码仓库,为...
### Android主要机制深入分析 #### 一、设计方法论探讨之设计意图 在探究Android复杂的内部运作机制之前,我们首先要明确研究的方向与目的。对于一个跨平台开发者来说,理解Android的核心在于把握其设计理念与实现...
这本书的源码库"android-art-res"则提供了书中提到的许多实践案例和解析,帮助读者更好地理解Android系统的内部工作机制。 在"android-art-res"这个压缩包中,我们可以找到与Android运行时环境(ART)和资源管理...
2. Dalvik与ART:探讨Android运行时环境的Dalvik虚拟机和后来的ART(Android RunTime)如何执行应用程序。 3. Android权限管理:详解Android的权限模型,如何保护应用程序的敏感操作并防止未授权访问。 二、逆向...
《Android源代码分析》这本书是Android开发者和学习者不可或缺的参考资料。它深入解析了Android操作系统的内部机制,帮助读者理解Android应用开发背后的原理,从而提升开发技能和优化应用性能。 一、Android系统...
本文将深入探讨Android一二三代壳加固原理,包括抽取壳、VMP加固以及DEX2C技术,分析其实现源码。 1. **抽取壳原理**: 加固的核心是改变原本的类加载机制,抽取壳的原理就是将原始的.dex文件(包含应用代码)从...
为了检测和修复内存泄露,开发者可以利用Android Studio的内存分析工具(Memory Profiler)进行实时监控,找出内存泄漏的源头。同时,遵循最佳实践,如使用Parcelable而非Serializable进行数据序列化,以及及时关闭...
ART(Android Runtime)运行时机制分析-附件资源
《老罗Android源代码情景分析》是一本深入探讨Android系统源代码的专业书籍,旨在帮助读者理解Android系统的内部工作机制。这本书的特色在于通过情景分析的方式,将抽象的代码与实际应用场景相结合,使学习过程更为...
Android系统使用Dalvik或ART虚拟机进行内存管理,它们都包含了自己的垃圾回收机制。然而,由于Java对象可能在JNI层(Java Native Interface)被引用,或者通过静态字段、全局变量等方式保持活动状态,因此即使在Java...
《Android系统源代码分析》是由李俊编著的一本深入探讨Android操作系统的书籍,主要针对对Android内核、系统架构以及应用程序开发有浓厚兴趣的读者。这本书提供了对Android系统源代码的详尽解析,帮助读者理解...
7. **权限管理系统**:Android的安全模型基于权限,源代码分析有助于理解权限的授予、检查机制,对于开发安全应用至关重要。 8. **编译与构建系统**:Android使用Build System(如Makefile、Gradle)进行编译和打包...
通过分析源代码,开发者能够理解系统的运行机制,优化性能,甚至进行自定义系统开发。罗升阳的这本书聚焦于这一核心主题,提供了丰富的实践案例,以帮助读者深入掌握Android系统的核心技术。 压缩包中的文件可能...
了解和分析Android系统的工作原理以及它的框架结构对于开发高质量的应用程序至关重要。本文将根据提供的文件信息,详细阐述Android系统各个组件的原理和功能。 首先,Android是一个基于Linux内核的开源操作系统,它...
4. **Dalvik/ART虚拟机**:早期的Android采用Dalvik虚拟机,后来演进为ART(Android Runtime),它们负责Android应用的运行。虚拟机的内存管理和垃圾回收机制对于应用性能有直接影响。 5. **Android Framework**:...
- **运行时环境**:包括Dalvik虚拟机和ART(Android Runtime),负责执行应用程序的字节码。 - **系统库**:提供了一系列的C/C++库支持,如SQLite、SSL、OpenGL ES等。 #### 基本空间划分 为了更好地组织和管理...
5. **内存管理**:Android使用Dalvik或ART虚拟机进行内存管理,涉及对象分配、垃圾回收和内存泄漏检测。理解这些机制,开发者能编写出内存效率更高的代码,避免因内存问题导致的应用崩溃。 6. **安全机制**:...