背景
1999年,Sun公司在Personal embedded Java的基础上提出了J2ME(Java2 Micro Edition)规范族。J2ME是针对消费电子和嵌入式设备制订的Java2的精简版本。MIDP (Mobile Information Device Profile)是J2ME针对移动通信设备设计的一个子集。J2ME/MIDP为移动通信设备提供了一个统一的开发平台,使得开发人员可以快速为不同的移动通信设备开发完全可移植的增值应用,而无需考虑不同设备的硬件和软件差异。J2ME的核心是嵌入式Java虚拟机KVM(Kilobyte Virtual Machine)和CVM(Compacted Virtual Machine)以及基于虚拟机的Configuration和Profile。目前,由一系列领域相关的公司发起了一个称为JCP(Java Community Process)的组织,由该组织的成员制定J2ME和其他Java相应规范,各研究机构和公司根据这些规范实现自己的产品。
以J2ME技术为代表的嵌入式Java技术正在得到越来越多的研究和应用。为满足嵌入式应用的需要,尽管作为嵌入式Java的J2ME进行了不少适应性的修改,但仍要求终端具有比较丰富的资源。对嵌入式Java的研究集中于嵌入式虚拟机的实时技术、垃圾回收技术、线程机制、解释和编译技术以及集成开发环境等方面,使得嵌入式Java虚拟机不但能降低对资源的需求,满足更广泛嵌入式应用的需要,还能有效降低应用的功耗情况。
嵌入式Java工具集包括:JavaFilter——可用于创建域和用于运行Java程序的方法的列表;JavaCodeCompact ——从整个集合中某个应用需要的域和方法列表中选择,并且删除不必要的平台组件,以及创建数据结构集合的表示;还有JavaDataCompact 用于链接各种各样的外部文件(例如HTML,音频或者图形文件)。1
优势Java因其具有的诸多优点受到了嵌入式领域的青睐,并得到了大量的研究与开发应用。自从1993年Sun公司提出Java技术以来(Java语言规范和Java虚拟机规范)对Java的应用和研究一直呈逐渐上升的趋势,其应用和研究范围覆盖面极广,主要涵盖了以下领域:2
(1)超级计算领域,如JPVM (Java ParallelVirtual Machine)、PJVM( Parallel Java Virtual Machine)、Java Grand等;
(2)企业计算领域,如J2EE、Grid 、Web service等;
(3)嵌入计算领域,如PersonalJava,、embedded Java和Card Java等。
对于嵌入式系统来说,Java技术比C语言和汇编语言具有很明显的优越性,可主要归纳为以下几点:
首先,Java具有跨平台性。“一次编写,到处运行”的特点使其十分适合在硬件与操作系统平台差异较大的嵌入式系统上进行计算,不仅可以节省大量资源,同时也可以保证软件的可复用性。
第二,适合网络应用。Java具有完备的网络编程接口,例如,Socket和Stream, URL以及通过网络的类加载技术等。利用这些接口,不但可以快速开发出应用程序而且提高了安全性。
第三,极佳的安全性。Java具有多个层次的安全防护措施,可以阻挡病毒与其它的入侵行为,以避免造成Java系统内的不稳定,提高了嵌入式系统的可靠性。
应用模型目前,在嵌入式系统中运行一个完整的项目是不现实的。首先,Java不包括直接访问内存和寄存器的机制,所以需要设备驱动以及其它由C/C++或者汇编语言写成的支持软件,这些支持软件可能被Java程序所调用也可能作为一个线程与Java运行环境并行运行。
在准备Java应用系统前,考虑Java的应用模型使其适合于整个应用的体系结构是非常重要的。目前,针对于嵌入式系统的Java应用模型主要是以下四类:No Java,嵌入式web服务器,嵌入式Applet,嵌入式application。这四个应用模型根据Java字节码的位置、Java字节码所运行的处理器,这两个变量来区分,每个变量可以取值target或者host target指所在的嵌入式系统,host指连接嵌入式系统的计算机。
No Java包括所有的字节码在本机存储并且在host上执行的方案,虽然使用了Java,但不是在嵌入式系统上运行。
嵌入式web服务器应用模型中,Java字节码在目标嵌入式系统的Flash存储器或者ROM中存储,但是在Host上执行。这种模型对于需要图形接口的嵌入式系统非常有用。在host上运行的web浏览器执行从嵌入式系统中下载的字节码。除了字节码,这种方案中的嵌入式系统必须存储至少一个HTML文件,并在嵌入式系统中运行嵌入式web服务器软件。因为Java不在嵌入式系统中运行,所以无需Java运行环境。
第三和第四应用模型中,Java字节码真正在嵌入式系统中运行,所以需要嵌入式Java运行环境。在嵌入式Applet模型中,Java字节码在host工作站中存储,通过网络发送到嵌入式系统,由嵌入式系统执行字节码并将结果发回到host。嵌入式Applet能被用于执行网络管理的功能比如代替SNMP。
在嵌入式application模型中,嵌入式软件或者全部或者部分的用Java开发,Java字节码存储在非易失存储器中,并且在嵌入式运行环境中执行。这种运行方式与在嵌入式系统中执行C/C++相似,本地代码由处理器取指令并且执行。因为Java没有直接访问硬件的能力,它仍然必须依赖于由C/C++写的本地方法,这与C使用汇编语言来完成平台相关的任务相似。