从未如此顺手 Android 4.4ART模式体验

  泡泡网手机频道11月28日 谷歌在本月低调发布了由自己倾力打造的Nexus 5手机,随之而来的还伴有Android 4.4操作系统。然而这个系统最大的亮点莫过于针对RAM的占用进行了深度的优化,以至于谷歌官方宣称运行内存仅有512MB的老款手机,同样可以流畅运行Android 4.4系统,这说明谷歌已经对该系统有了充分的信心。然而这一切是如何实现的?为什么曾经需要大内存才能保证系统流畅,现在不需要了呢?这一切还要从最新的ART模式说起。

从未如此顺手 Android 4.4ART模式体验

  ART模式究竟是什么?ART模式是Android runtime的简称。它与传统的安卓Dalvik模式究竟有什么区别?它究竟好在哪?其实在Android 4.2以前,安卓手机系统的应用程序均在Dalvik Java的虚拟机上运行,这种运行模式是还要依靠一个编译器来实现与应用程序的沟通。应程序每次运行时,都需要将程序内的代码即使转变为机器码才能运行,这无形中多附加了一道手续,这就造成了耗电相对较快、占用内存大、即使是旗舰机用久了也会卡顿严重的现象。

从未如此顺手 Android 4.4ART模式体验

  相比较而言ART模式就很好的解决了这个问题,通过在安装应用程序时,自动对程序进行代码预读取编译,让程序直接编译成机器语言,免去了Dalvik模式要时时转换代码,实现高效率、省电、占用更低的系统内存、手机运行流畅。但凡事总有正反两面,ART在解决了该问题的同时,同时也有如:会占用略高一些的存储空间、安装程序时要相比普通Dalvik模式要长一些时间来实现预编译。而现在我们就来实际体验下ART模式,看看它究竟是否值得我们的期待。

   占用存储空间对比:

从未如此顺手 Android 4.4ART模式体验

从未如此顺手 Android 4.4ART模式体验

  通过分别对ART模式与Dalvik模式的测试,发现ART模式下RAM与ROM的占用还是比较明显的,最高相差近20%,而最小不足5%。安卓系统的应用程序APK随着1080p的普及和其他深入的优化,体积也越来越大,而在ART模式运行下,存储占用(ROM)或是运行内存(RAM)占用会更明显。不过这个幅度,完全可以接受,毕竟我们现在的手机基本上都8GB起步,完全不是什么问题。

   实际效率测试:

http://player.youku.com/player.php/sid/XNjQwNjg2Mzgw/v.swf

(视频编译自国外媒体)

   通过视频展示的测试信息来看,其实ART与Dalvik模式整体响应速度相差并不多,大多都相差在1秒或不到1秒左右的时间。当然,这也是目前针对ART模式优化的应用程序较少的原因。在基准跑分测试中,ART模式的优势就显现出来了,确实要比Dalvik高效了不少。

从未如此顺手 Android 4.4ART模式体验

  软件的兼容性对比:

从未如此顺手 Android 4.4ART模式体验

  一个新的底层运行模式,毕竟还是要靠应用程序的APP适配才能最大程度的发挥出最大优势。然而目前由于Android 4.4并未大规模普及,仅在部分机型才有,所以目前ART模式下的兼容性,暂时还是个问题,有许多应用程序并未适配,会出现强行关闭、或干脆直接无响应的情况,这一切都是需要我们等待手机厂商后续的优化跟进才行。

  耗电量测试:

  编分别对Nexus 5的两种模式进行了续航测试,在4小时的中等强度测试下,发现ART模式下,要略比Dalvik模式省电一些,大概在5%---8%左右。(具体还与信号、后台程序运行情况略有偏差)

谷歌(Google)Nexus 5 联通3G手机(黑色)WCDMA/GSM港版手机

   总结:

   通过编实际使用的几天下来,在刚刚切换到ART模式下,其实并没有太多的感觉,觉得一切流畅与速度,都是理所应当的。但当切换回Dalvik模式时,滑动桌面的一霎那就知道究竟差在哪里。ART模式下,手指与屏幕的滑动可以说到了极其流畅的底部,基本做到了手指滑动到哪里,屏幕显示就跟着到哪里。如果单就滑动时跟手的流畅度而言,iOS系统是9分的话,Nexus 5的ART系统小编给打8.9分。他们之间几乎已经没有太大的区别了。

   而关于ART模式与Dalvik究竟有什么本质的不同,打个比方就明白了。Dalvik模式像是一台折叠自行车,每次骑之前都要组装后才能上路。而ART模式就是一个已经装好的自行车,直接就能上车走人。所以ART模式在效率上肯定是要好于Dalvik这已经基本毫无悬念,我们目前能做的就是耐心等待应用厂商对程序进行优化,以此适配ART模式,好有一种全新的体验。

一、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文件格式可以查看源代码。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值