给这些五花八门的移动设备提供一种普遍适用的开发平台看来多半是不可能的了。所以J2ME定义了两种类型的规范,它们携手提供一种移动Java平台,这两种规范就是configurations 和profiles。Configuration和profile规范提出了相当多的技术术语,下面我们就来讨论一些。
J2ME通过对Configuration的抽象来处理大量千差万别的移动设备硬件功能。J2ME configuration定义了特定设备可用的虚拟机和低级API,同时提供相应的开发基础。目前可用的Configuration有两种,它们是连接设备配置CDC(Connected Device Configuration)和连接有限设备配置CLDC(Connected Limited Device Configuration)。
CDC应用于相对内存量较大、更强处理器的移动设备。CDC规范采用了内存优化的虚拟机,也就是所谓的CVM,通过它提供等同标准JVM的特性。按照Sun的文档说明, CDC针对新型PDA、智能通讯设备和机顶盒之类的高端设备。为了能够受到CDC支持,移动设备必须至少具备以下条件:
CDC的要求有利于昂贵的移动电话、IR扫描仪或类似产品。CLDC则主要针对那些更轻便、更便宜、不能满足CDC要求的设备。
CLDC采用了更轻型的虚拟机,设计为在较低内存环境下运行。这种JVM的参考实现也就是所谓的KVM,为什么要叫KVM呢?这是因为这种虚拟机的大小是以千字节度量的。CLDC 的设备需求如下:
由于受到严格的内存容量限制,KVM因此缺乏一些完整JVM所提供的特性,这就是说,你可能得改变自己的编程风格了。KVM在如此低内存要求下不得不在浮点数学计算、反应和对finalizers类的支持等方面对性能折中。使用CLDC的开发者在编译程序之后必须预先采用J2ME开发工具包所提供的一种检查工具对他们的源代码进行校验。
如果说配置为应用程序提供了基础,那么profile则提供了应用程序的框架。profile定义了一整套J2ME应用程序可用的API类而且专门针对给定配置创建。Sun推出了2种可用的参考J2ME profile:基础(Foundation)和移动信息设备profileMIDP(Mobile information Device Profile)。
基础profile主要用于CDC配置,因而其虚拟机几乎等同于标准的虚拟机。这意味着,使用基础profile的开发人员必须访问完整实现的J2SE特性集。
MIDP连同功能较低的CLDC配置一道为开发今天的移动设备应用程序提供了你最可能用到的Java平台。MIDP支持J2SE类库的有限子集而且为在CLDC配置上使用定义了定制的用户接口和输入/输出类。
兼容性如何呢?J2SE应用程序能在J2ME平台上运行吗?这些问题的答案主要取决于配置和profile的具体应用了。J2SE代码无须或者很少修改即可采用CDC和基础profile运行。然而,正如我们在这里所讨论的那样,由于主机硬件受到限制,CLDC和MIDP profile只提供了很有限的功能集合。因此它J2SE应用程序不大可能在不加修改的情况下就运行在这类平台上,除非它把自己限制在两种平台的API交集之内(严重地限制了其功能)。因为CIDC的要求对应了今天大多数手持设备的功能,所以任何J2SE应用软件想不经修改就运行在给定的设备上是值得怀疑的。你多半得修改需要移植到J2ME的应用软件。但也别紧张。从保住饭碗的角度看这未尝不是好事。