WEB开发网
开发学院手机开发Android 开发 Android2.2 jit 的作用 阅读

Android2.2 jit 的作用

 2010-05-26 22:13:00 来源:WEB开发网   
核心提示:的早期版本中, 源代码被翻译为一种中间表示即字节码,Android2.2 jit 的作用(2), 字节码不是任何特定计算机的机器码, 它可以在多种计算机体系中移植,让G2这样的机器跑到30分也是没问题的,但是实际使用的体验不会好很多, 字节码被解释着运行在虚拟机里,动态编译环境是一种在执行时使用编译器的编译环境
的早期版本中, 源代码被翻译为一种中间表示即字节码。 字节码不是任何特定计算机的机器码, 它可以在多种计算机体系中移植。 字节码被解释着运行在虚拟机里。

动态编译环境是一种在执行时使用编译器的编译环境。 例如, 多数 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分也是没问题的。但是实际使用的体验不会好很多。

所以,不要迷信~

上一页  1 2 

Tags:Android jit 作用

编辑录入:coldstar [复制链接] [打 印]
赞助商链接