大家知道Android 2.2的新特性中有条是“使用了全新的JIT内核编译器”,不过我们之前并没有得到更多的消息,最新消息显示,经测试新版的JIT编译器为2.2版系统带来高达500%效能提升。
Armor Games公司的应用开发人员Ian Douglas展示了Nexus One运行Android 2.2版系统的测试结果,使用Linpack的Benchmark获取分值是目前大屏幕智能手机中运用比较多的基准测试之一。从结果中可以看到,Nexus One安装了使用新版JIT编辑器的Android 2.2系统后, Benchmark分数由6-7 MFLOPS提升至38-40 MFLOPS,整体分值至少提升了五倍以上。
在
Google I/O大会中,来自JIT编译负责团队的Ben Cheng和Bill Buzbee将会进行一场A JIT Compiler for Android’s Dalvik VM演示,相信新版系统大幅提升效能将会成为现实。
虽然这些测试是在Nexus One上进行的,但是新版的JIT编译器应该会在Android 2.2版中得到普及,届时所有Android手机升级系统之后都将能体验到性能提升带来的快感。不过目前仍不能评估这项更新见效的
时间,大多数应用
程序都将针对新编译器的优势进行测试和调整,而且手机厂商还要针对每一款机型开发不同的升级包。
JIT Compiler(Just-in-time
Compiler) 即时编译
最早的
Java建置方案是由一套转译程式(interpreter),将每个Java指令都转译成对等的微处理器指令,并根据转译后的指令先后次序依序执行,由于一个Java指令可能被转译成十几或数十几个对等的微处理器指令,这种模式执行的速度相当缓慢。
针对这个问题,业界首先开发出
JIT(just in time)编译器。当Java执行
runtime环境时,每遇到一个新的类别(
class:类别是Java程式中的
功能群组),类别是Java程式中的功能群组-JIT编译器在此时就会针对这个类别进行编译(compile)作业。经过编译后的程式,被优化成相当精简的原生型指令码(nativecode),这种程式的执行速度相当快。花费少许的编译时间来节省稍后相当长的执行时间,JIT这种设计的确增加不少效率,但是它并未达到最顶尖的效能,因为某些极少执行到的Java指令在编译时所额外花费的时间可能比转译器在执行时的时间还长,针对这些指令而言,整体花费的时间并没有减少。
基于对JIT的经验,业界发展出动态编译器(dynamic compiler),动态
编译器仅针对较常被执行的程式码进行编译,其余部分仍使用转译程式来执行。也就是说,动态编译器会研判是否要编译每个类别。动态编译器拥有两项利器:一是转译器,另一则是JIT,它透过智慧机制针对每个类别进行分析,然后决定使用这两种利器的哪一种来达到最佳化的效果。动态编译器针对程式的特性或者是让程式执行几个循环,再根据结果决定是否编译这段程式码。这个决定不见得绝对正确,但从统计数字来看,这个判断的机制正确的机会相当高。事实上,动态编译器会根据「历史资料」做决策,所以程式执行的时间愈长,判断正确的机率就愈高。以整个结果来看,动态编译器产生的
程式码执行的速度超越以前的JIT技术,平均速度可提高至50%。
即时编译(Just-in-time Compilation,
JIT),又称
动态转译(Dynamic Translation),是一种通过在运行时将
字节码翻译为机器码,从而改善字节码
编译语言性能的技术。即时编译前期的两个运行时理论是字节码编译和
动态编译。
在编译为字节码的系统如 Limb 编程语言,
Smalltalk,UCSD P-System,
Perl,
GNU CLISP,和
Java 的早期版本中, 源代码被翻译为一种中间表示即字节码。 字节码不是任何特定计算机的机器码, 它可以在多种计算机体系中移植。 字节码被解释着运行在虚拟机里。
动态编译环境是一种在执行时使用编译器的编译环境。 例如, 多数
Common Lisp 系统有一个编译函数,他可以编译在运行时创建的函数。
在即时编译环境下, 字节码的编译是第一步, 它将源代码递归到可移植和可优化的中间表示。字节码被部署到目标系统。 当执行代码时,运行时环境的编译器将字节码翻译为本地机器码。 基于每个
文件或每个函数:函数仅仅在他们要被执行时才会被编译。
目标是要组合利用本地和字节码编译的多种优势:多数重量级的任务如源代码解析和基本性能的优化在编译时处理,将字节码编译为机器码比起从源代码编译为机器码要快得多。部署字节码是可移植的,而机器码只限于特定的系统结构。从字节码到机器码编译器的实现更容易,因为大部分工作已经在实现字节码编译器时完成。
好,说白了,JIT 在Android方面其实现实际上是在 Dalvik vm这一层,与内核是分离的,直观的表现就是几个库文件。
然后,JIT到底能提升机器多大的性能?我也不知道——不要跟我说Linpack跑多少分,学计算机的都知道,Linpack只是一个基准测试程序,测试的是机器的浮点计算能力、向量性能和高速缓存性能。Linpack只是众多基准测试的一种,它的分数代表不了任何东西。它只有一个局部的计算性能参考
然后,为什么使用了JIT之后,Linpack的分数就能提高很多?OK,看Linpack是干什么的——有一项是测试高速缓存的,那么,使用JIT之后,一部分Dalvik的字节码(apk程序包的逻辑部分,如*.dex和*.odex)会被转译成手机CPU的指令代码,那好,这部分代码就可以进行重用,减少了编译的时间,这就相当于一个“缓存”,使得访问Dalvik字节码的次数大大降低,也就是减少了解释执行字节码的次数。要知道,解释执行字节码的速度是比较慢的,所以直接体现就是Linpack分数的提高。
那么,JIT对我们使用的影响大么?
准确的说,有,但不是很大,根本达不到Froyo 2.2宣传的那样(我恨IT媒体)几倍的提升。为什么?因为我们用的系统不光有逻辑(程序执行),还有UI(图形渲染),以及其他很多因素(线程调度、I/O等等),单独的JIT技术只是提高了程序代码的执行效率(还不是全部),并未对系统有全局优化的功效。如果可以的话,可以针对Linpack专门设计一个优化的虚拟机,让G2这样的机器跑到30分也是没问题的。但是实际使用的体验不会好很多。
以下是Android2.2可能出现的10大功能:
1、新增应用程序“全部升级”或“自动升级”选项
谷歌出于隐私等因素考虑,要求用户在安装或升级应用时要进行
设置。如果你手机里30个应用中有8个需要升级,那么恭喜你,有的忙活了。
所以对于Android平台的用户来说,这一新功能将是十分实用的,Android的一大特色就是能广泛支持各种各样的应用程序。如果Android 2.2的应用程序自动升级功能将大大帮助用户减少很多手动操作,特别是安装了许多应用程序的用户。
2、Android在线应用市场与PC端保持同步
目前,用户还不能从PC端直接浏览Android应用市场,
网络
流量费用又是那么的惊人,许多人被迫望而却步,给Android应用的普及和
下载造成了一定障碍。希望未来在线应用市场能注重用户友好性,提供多种访问途径节省访问成本。
3、自由升级系统版本
如果从FroYo时代开始,谷歌应该允许用户从在线应用市场、支持服务站点等处轻松下载AndroidOS更新程序,那无疑给用户带来极大的方便。
4、电源管理功能
Android手机遭受用户抱怨最多的是其
电池续航能力问题。这也难怪,比如大尺寸高清触控屏幕、高端处理器、多任务处理、数据同步每一个都是耗电大户。但是用户在查看Twitter更新或下载时并不需要太多电池能源,希望Android 2.2能原生提供高/正常/低多种能耗模式延长电池续航时间。
必须一提的是,很多谷粉入手新机后像Nokia那样设置个起床闹钟就关机安心入睡了(结果当然很悲惨),毕竟省电不能以牺牲用户体验为代价。
5、更多付费模式
现在用户购买应用主要是通过信用卡支付,也有部分支持PayPal支付,但总体上购买流畅有待进一步简化。比如新增网银或直接将费用选在网络费里月底结账等。
6、新版音乐播放器
Android默认的音乐播放器表现中规中距,但置身于具有特殊意义的Android 2.2里显得过于平庸。音乐播放模式需要一个更好的文件系统组织体制,满足人们多种方式浏览的需求。
7、基于SD扩展存储卡安装模式
Android平台的用户可能会对此非常关注,毕竟此前版本的android如果想要将程序及应用安装到
SD卡上,还是要破费一番周折才能实现的。假若此传言是真的话,于用户而言受益匪浅,机器资源得到极大释放,而且以后选择应用程序更加肆无忌惮。
8、高级通知选项卡
当系统发现新更新或收到邮件时会发出通知信息,Android历代版本中通知选项的设置略显笨拙,应该为用户提供独立的、高效的处理方案。
9、支持USB/蓝牙键盘
USB键盘需要电源支持,恐怕比较棘手;但蓝牙HID人机接口设备已经成为现代智能手机交互性的重要体现。苹果
iPhone可以支持该功能,Android自然不容落后。此外,虽然
Flash和Html5之争未见分晓,但
官方态度预示下一代AndroidOS仍将支持Flash。
10、离线地图存储
地图 搜索也是人们常用功能之一,但频繁使用的副作用就是月底的账单体积比较庞大。如果Android支持在网络接入(比如Wifi)时将地图数据保存下来,那么下次使用时只需消耗较少的流量就能完成查找需要了,毕竟时刻替用户着想才是王道。
Android 2.2新特点包括:
- 全新的JIT编译器
- 额外的可用RAM:2.2将使用新的Linux内核(从2.6.29升级至2.6.32),可存取更大的RAM
内存
- 增强支持OpenGL ES 2.0:增加新的API接口让开发者更容易使用OpenGL ES 2.0
- 支持Flash 10.1:Android版Flash将会在今年上半年正式发布,新版本Android系统将会直接内置,或者通过
固件升级获得
- 支持APP2SD将支持
软件安装到存储卡
- 修复多点触摸传感器的问题
- 激活轨迹球闪光色彩设置:在Google推出的Nexus One广告中曾经出现过,但是最终并没有在Android 2.1版系统中开启。
- 修复FM收音机支持:内置FM芯片的
Desire和Incredible将获得FM收音机功能