透视Java手机终端技术发展

欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

J2ME编译技术的发展

因为Java语言的设计初衷是使用解释的方式支持应用程序的可移植性,早期 Java 运行时的性能级别远低于C和C++之类的编译性语言。而Java 应用程序的性能也经常成为讨论的热点。如图5所示,Java虚拟机每次遇到一条字节码指令,就将其转换成机器码,然后给CPU进行执行,执行完机器码之后,就把这些机器码丢了,接着再翻译下一条字节码的指令,继续下去,如此这般,自然效率低下。

图5 Java虚拟机翻译Java语言的过程

近年来,为了提升Java的性能,在编译技术方面有了一些新的突破,这一节将介绍一些比较流行的编译技术。

1. JIT(Just In Time)编译方法

从传统的虚拟机处理字节码的过程可以看出,即使下次执行到以前执行过的 bytecode 指令,依然要重新翻译成机器码才能执行,如此一来,效率当然不好。JIT编译方法的原理是,程序运行时,JIT 编译器选择将最频繁执行的方法编译成本地代码。运行时才进行本地代码编译而不是在程序运行前进行编译(用 C 或 C++ 编写的程序正好属于后一情形),保证了可移植性的需求。

图6 JIT编译器原理

Java 运行时供应商开发了一些复杂的动态编译器,通常称作JIT(Just-in-time,JIT)编译器。程序运行时,JIT 编译器选择将最频繁执行的方法编译成本地代码,运行时才进行本地代码编译而不是在程序运行前进行编译(用 C 或 C++ 编写的程序正好属于后一情形),保证了可移植性的需求。以后再次执行到这里时,就不用再翻译,直接从内存取出机器码即可执行。这么一来,只要内存够大,JIT 编译器的技术够好,那么Java 字节码的执行速度也可以逼近纯编译式的语言。

2.AOT(Ahead Of Time)编译方法

虽然 JIT 编译技术已经能够提供与静态语言性能相当的性能水平,但是动态编译并不适合于某些应用程序,如 GUI 接口之类交互式应用程序就是这样的例子。在这些情况下,AOT编译可能是合适的解决方案。该方法的原理是,在程序执行前生成 Java 方法的本地代码,以便在程序运行时直接使用本地代码。目的在于避免 JIT 编译器的运行时性能消耗或内存消耗,或者避免解释程序的早期性能开销。

图7 AOT编译器原理

J2ME未来的发展趋势探讨

从本文的分析可以看出,不管是标准化组织、终端厂商、运营商,还是应用开发者,都在促进J2ME跨平台特性,减少各平台间的分裂性,繁荣Java应用方面,做出了不少努力。而作为Java业界的领头羊,Sun Micro Systems也计划打造一款整个操作系统都是由Java实现的纯Java终端,而arm公司也有推出专门针对Java 指令的加速芯片,通过硬件加速来提高Java的执行效率。由此可见,虽然目前J2ME还没有百分之百地实现跨平台性和执行的高效性,相信随着业界的共同努力,Java的发展空间会越来越大。

[1][2][3]

不做任何解释。没有人明白,

透视Java手机终端技术发展

相关文章:

你感兴趣的文章:

标签云: