J2ME CLDC概述

什么是CLDC

      CLDC(Connected Limited Device Configuration,联网的受限设备配置)是用来开发在无线设备上运行的应用程序所要用到的一组最小的 API。CLDC 描述了所有无线移动设备所需的一个最小级别的功能集合。
      对于 Java ME 平台,CLDC 为移动电话、双向寻呼机以及类似设备定义了基本配置(Java 语言、虚拟机功能和基本类库)。这些设备具有以下特性:
·总内存量为 128 KB 到 512 KB。
·具有有限电源,如电池。
·可以连接到网络。
·具有相对有限的用户界面,通常只限文本。

 

CLDC中类的预审核概述

      J2SE 提供了字节码的审核机制用于检查类文件的完整性。该审核机制是在编译时进行的,其目的是确保类文件中不包含可能破坏系统安全的或是违反了 Java 语言规范的恶意代码。其内容主要包括:

1.所有本地变量在使用前必须初始化
2.在构造对象时,其构造函数必须在对象被使用前调用
3.每个对象的构造方法必须调用父类的构造方法(要求最先调用 java.lang.Object 的构造方法)
4.本地变量、实例和静态成员在声明时指明的对象类型必须和实际赋值的对象类型一致。例如,给一个生命成 String 类型的变量赋予Integer 类型的值是不被允许的。
      类的审核机制仅仅对于外来的类文件(比如从网络上下载的),而对本地文件系统中的类的加载是不用审核的。

      CLDC 和 J2SE 一样,也要求虚拟机能够辨别并拒绝非法的类文件。但由于 J2SE 中定义的标准类审核过程对于应用 CLDC的小内存消耗的类型设备来说是不现实的,因此 CLDC 专门定义了其特定的预审核机制。

      在 CLDC 的预审核机制中,要下载的 Java 类文件的每一个方法都包含了一个堆栈映射属性,这个属性是 CLDC 独有的,J2SE规范中没有定义。堆栈映射的属性会通过虚拟机的预审核器添加到标准的类文件中,该预审核器会分析类中的每一个方法。堆栈映射属性通常会增加约5%的类的大小。

J2ME CLDC概述_第1张图片

 

      如图所示,当程序的源程序被编译后,必须被预审核器预审核,然后才能生成可以被下载到目标设备上运行的类文件。把一部分的审核任务放在预审核器中完成,可以使与 CLDC 兼容的虚拟机审核 Java 类文件时速度更快,并且只需要很少的虚拟机代码和动态内存,而它们的安全级别相同。因此,在 CLDC/MIDP 环境下开发程序,其程序经过编译后,必须经过审核后才能运行。

特别需要说明的是:

     经过预审核的Java类文件不需要修改就可以直接运行在 J2SE 和 J2EE 环境上,这使得移植和相互调用变得非常简单。
运行时的审核机制 CLDC 把它交给了设备自己去实现。设备可以根据自身的需要在加载类或者安装应用程序的过程中执行。在运行时,虚拟机迅速地对字节码进行线性少秒,将每个有效的指令与合适的堆栈映射项目匹配。运行时的审核过程是建立在预审核机制上的,所以比预审核还要快,占用的动态内存更少。
CLDC中的类的文件格式

      CLDC 要求所有第三方开发的支持 CLDC 的 Java 应用程序在公开发布时都要使用 JAR 包的格式,而且 JAR 包内的类必须是经过了预审核器审核之后的。同样的,CLDC 要求所有实现 CLDC 的虚拟机也必须能够识别和调用 JAR 包中的文件。

CLDC中的类库

      CLDC 标准为了能够涵盖尽可能多的设备,其类库只包含了最小的Java 平台特性和API。 面对严格的内存限制和当前各种各样的小型设备,CLDC 不可能覆盖全部的这些设备。因此在 CLDC 的规范中,不可避免的会造成对某些设备要求过高或是对另一些设备要求又太低的现象。为了确保与其他 Java 平台的兼容性,绝大多数的CLDC 类库是从J2SE 和J2EE 中继承的, 是J2SE 和J2EE 的子集。由于目标设备的特殊性,CLDC 类库在安全、输入/输出、用户界面、 网络和存储管理等方面没有全部使用J2SE 的实现;其中的部分类库CLDC 进行了重写,如网络连接。

      CLDC 的类库可以分为两种:一种是从J2SE 标准类库中继承的;另 一种是专门为CLDC 设计的(这部分类也可以被映射到J2SE 中)。

      对于第一种 CLDC 类库,包括了J2SE 的3 个最核心的包java.io、java.lang 和java.util。而且这3 个包和J2SE 相比,也只是J2SE 相应包的一个很小的子集。例如java.util 的类与接口由 J2SE 中的53 个减少到10 个。

对于后一种 CLDC 类库,只有描述标准连接框架的javax.microedition.io 包,和MIDP 中定义的包一起放于javax.microedition 包中。

java.lang包

      java.lang 包包含了 Java 语言API的核心部分继承下来的类,但是 CLDC 只继承了 J2SE中一半的类,而且一些类中的接口并没有完全实现。这主要表现在:

绝大部分的虚拟机不支持错误和部分异常类被去掉了。
不支持 float 和 double 数据类型及其相应的类。
ClassLoader、SecurityManager 等 CLDC规范上没有说明必须支持的类也不在此包中。
下表给出了 CLDC 的 java.lang包中的类及类继承的关系。

J2ME CLDC概述_第2张图片

你可能感兴趣的:(java,虚拟机,J2SE,网络应用,配置管理)