J2ME可以在好几个不同的配置中进行配置。 就像先前提到的,每个配置为一组通用设备提供最小的 Java平台,到目前为止,只有两种配置规范。通过 Java规范定义的这两种配置是 Connected Limited Device Configuration (有限连接设备配置, CLDC )和 Connected Device Configuration (连接设备配置 CDC )。
CLDC是为使用较小的存储容量的设备设计的 。 CLDC用于内存在128到 512K之间的消费电子设备, 这一类别中典型代表的设备包含呼叫器、行动电话、PDA和POS终端;而另一方面, CDC用于比 PC机小但是具有比 512K内存多的设备,这一类设备包括互联网络电视系统、机顶盒、POS系统、汽车导航以及娱乐系统。一般来说, CDC使小型设备只要具有少量的资源,至少比台式机要少的资源就能进行Java编程,而CLDC使小型设备所拥有的资源只要比一张智能卡多一点就可以进行Java编程了。除了在容量大小和能力上对虚拟机规定了必要条件,配置还规定了类应用程序接口要包含常见的 java.io、 java.net、 java.util和 java.lang包,配置可能还要包括其他需要的程序包。
CLDC
CLDC起源可以追溯到1999年JavaOne大会上介绍的Sun的第一个袖珍版 Java和第一个 KVM以及相关的类库,虽然 CLDC和所有的配置都满足成为虚拟机的条件,可它本身还不是虚拟机,CLDC的引用实现只是包含在当前的分布中的 KVM。
根据规范中所说,运行 CLDC的设备应该有 512K或更少的内存空间、一个有限的电源供给 (通常是使用电池)、有限的或断断续续的网络连接性 ( 9600 bps或更少 )以及多样化的用户界面甚至没有用户界面。 通常说来,这个配置是为个人化的、移动的、有限连接信息设备而设计,比如呼叫器、移动电话和 PDA等。
与 J2SE相比, CLDC缺少下列所说的这些特征:
AWT(抽象窗口开发包), Swing或其他图形库
用户定义类装载器
类实例的最终化
弱的引用
RMI
Reflection(映射)
CLDC有四个包: java.lang、 java.util、 java.io和 javax.microedition。 除了 microedition包以外,其他的这几个包都是J2SE包的核心子集,CLDC采用这些J2SE类库,但是把其中一些在微型设备中用不到类、属性、方法去掉了。因此 CLDC类库有许多细微的差别。 如果您想研究J2SE和 CLDC类库之间的差别,请参阅相关文档,在此就不详细说明了。
想要理解为什么CLDC去除这么多J2SE中重要的类和特征,请回想一下与 CLDC相关的两条基本原理。首先,它只有 512K的内存空间, 而像RMI和映射需要的内存太大了。 其次,配置必须满足为一组通用设备提供最小的 Java平台。 在个人移动信息设备领域中,许多系统都不能支持 J2SE中的众多的高级特征。 例如,许多消费电子产品不能支持浮点数; 因此 Float(浮点类)和 Double(双精度类)就被删除了。 再看另外一个例子,许多系统没有或不提供访问一个文件系统的功能或权限。 因此与文件有关的类也被丢弃了。又如,错误处理是一个代价非常高的过程处理,在许多消费电子设备中,故障恢复是很难的甚至是不可能的。 所以在 CLDC中,许多错误处理类也被删除了。
java.microedition程序包提供了一个一般的结构来替代许多 J2SE网络输入/输出类。 CLDC一般连接器结构还定义了一个 Connector类,允许许多不同类型的连接能够使用静态方法,下表列出使用同一个Connector类创建和打开五种不同类型的连接的方法:
HTTP Connector.open(" http://www.xyz.com ");
套接字 Connector.open("socket://111.222.111.222:9000");
通讯端口 Connector.open("comm:1;baudrate=9600");
数据报 Connector.open("datagram://111.222.111.222");
文件 Connector.open("file:/xyz.dat");
一般连接器结构提供给应用程序开发者一个到通用低水平硬件的简单的映射表。成功执行 open语句将返回一个实现一般连接界面的对象。
CDC
CDC涵盖了个人电脑与有至少 512K内存的小型设备之间的中间地带。现在,这一类设备通常是共享的、固定的 (不用移动)网络连接信息设备,像电视机机顶盒,网络电视系统、互联网电话与汽车导航/娱乐系统等等。
首先,CDC基于 J2SE 1.3应用程序接口,包含所有定义在CLDC规范(包括javax.microedition程序包)中的Java语言应用程序接口。与CLDC相比, CLDC所有缺少的特性和类在 CDC中都被补齐,包含映射、最终化、所有的错误处理类、浮点数、属性、输入/输出 ( File、 FileInputStream等等 )和弱的引用。 一般说来, CDC中预期的类包括一个J2SE子集和一个完整的 CLDC超集就像使用所有的配置一样,CDC有基层虚拟机的具体的必要条件。 根据 CDC规范,基层虚拟机必须提供实现完整的 Java虚拟机的支持 。 如果虚拟机实现有一个用于激活设备的本地方法的界面,它必须兼容 JNI 1.1版本。 如果虚拟机实现有一个调试界面,它必须兼容 Java虚拟机调试界面 ( JVMDI )规范。 如果虚拟机有一个简表界面,它必须兼容 Java虚拟机简表界面 ( JVMPI )规范。 可见,为了实现这些功能,CDC肯定会变得很大,就不能称其为K虚拟机了,因此,我们通常称用于CDC的虚拟机为 CVM,这里的 C代表 compact、connected、consumer。