服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

勃勃生机的j2me技术简要标准介绍


  j2me的标准很多,这里我们只简要介绍几个基本而重要的标准。读者也可以直接去查标准的正式文档,在jcp网站可以找到所有j2me标准和规范,包括还在提出和审核阶段,没有正式成为标准的提案。
  
  虽然j2me标准繁多,但只要把握住标准划分的原因就很容易掌握。在这个技术飞速发展的领域,我们不能把眼光局限于标准的字面含义,而要灵活掌握,把握其精神。比如,cldc和cdc的定义中具体的最小内存需求仅仅是"最小的",随着硬件能力的飞速发展,很有可能一些界限会变得模糊。pda本来应该属于cldc的范围,但是compaq的ipaq上却实现了cdc。以后的下一代pda有64m内存并不意外,在其上实现cdc也是完全可能的。但是,从功能的角度,应该还是cldc以及pda profile更适合于pda的条件。到那时,具体的实现就要看厂商和开发者的选择了。还需要注意的是,由于profile是建于configuration之上,作为对configuration的扩展,因此profile必须configuration的支持。有的文章在讲到midp的内存需求时,说midp需要最少256k,这是指midp本身。而有的文章说midp需要最少768k,那时因为把作为基础的cldc所需要的512k算进去了
  
  cldc
  cldc(connected, limited device configuration)针对个人化的移动的有限连接信息设备,例如智能手机,双向呼机,pda等等。其要求是:
  512 kb 以下内存
  有限能源供应(通常使用电池)
  有限或非持续网络连接
  简单的用户界面(甚至没有)
  在如此严格的限制之下,cldc 只包括四个包,其中三个来自标准 java 规范并且作了缩减(java.lang、java.util 和 java.io),另一个专门针对cldc (javax.microedition)。
  
  包 描述 类和接口数目
  java.io 系统输入输出 18
  java.lang java 编程语言的基本类 38
  java.util 集合、日期和时间支持、各式实用工具类 10
  javax.microedition 通用连接框架(generic connection framework) 10
  
  cldc必须照顾最苛刻的硬件条件,因此去掉了许多重要的类和特征,只保留了最核心的一些基本类。例如rmi和映射因需要内存太多而被舍弃,错误处理要求的代价太高,也被删除了。许多设备不能支持浮点数,更不用说双精度类了。还有许多设备没有或不提供访问一个文件系统的功能或权限。不过请放心,对于那些能够支持更多特征的设备,它们所需要的这些功能或者超出标准j2se要求的功能,都可以由针对此类设备的profile来补充。
  
  cldc中唯一新增的javax.microedition包定义了一个通用连接框架(generic connection framework,gcf)。通用连接框架把j2se中的文件,sockets,http请求和其他输入/输出机制的概念抽象为更简单的一套类。可以说,它提供了java.io和java.net的同样功能,却不需要设备的特殊能力。与底层操作系统无关是configuration的基本要求。通用连接框架可以看成是构造通讯驱动的框架,这一点类似于j2se中的jdbc,后者是一个构造数据库驱动的框架。通用连接框架并没有定义对任何特定协议的支持,但是在sun的一个cldc参考实现中确实包括了对一些通讯协议的支持,这点使许多人感到困惑。那些协议只是一些例子,协议的支持应该在profile层或者专门针对某设备的扩展中定义。
  
  由于虚拟机处于configuration中定义平台的核心,configuration和虚拟机是紧密相关的。既然cldc的硬件要求如此苛刻,对其虚拟机也就有着非常高的要求。sun提供的参考实现是kvm(k virtual machine)。kvm是完全从头开始编写的,其设计目标包括:
  虚拟机的大小和类库为50到80kb左右
  内存占用为几十k
  在具有 16 位和 32 位处理器的设备上,有相当的性能
  高度可移植和可扩展,特定于机器和/或平台的代码的总量很少
  多线程和垃圾回收是独立于系统的
  可以对虚拟机的组件进行配置,以适合于特定设备,从而增强了灵活性
  
  kvm的实现是相当成功的。最早在1999年javaone大会的时候,作为sun的spotless计划派生结果,sun分发了许多palm v,提供了palm os上的第一个kvm版本和一个实验性的类库com.sun.kjava。这一kvm非常小而紧凑,只需要几十k内存。而com.sun.kjava类库提供了palm的图形用户接口,palm数据库访问,简单的集合类等等。将两者结合,开发者就可以开发palm上的java应用,因此它受到了开发者的广泛欢迎,网上也有了许多教程和示例代码。事实上,到目前为止,这都是在palm上开发java程序的唯一合理途径。cldc没有定义用户界面等api,midp并不适合pda,对应的最合适j2me标准是pda profile,但是尚未完成。许多开发者强烈要求sun在正式的j2me标准中继续支持它,但是sun已经放弃了这一技术,而且并不保证正式的pda profile与之的兼容性,因此不建议读者过多研究。
  
  由于这一历史原因,造成了很多名词上的困扰。许多早期的文章把这一kvm与com.sun.kjava包合称为kvm,表示这一技术,而现在所说的kvm应该是单单指sun的cldc虚拟机参考实现。甚至还有人用k java作为j2me的代称,表示基于kvm的java,这很容易和正式的j2me标准以及早期的com.sun.kjava包相混淆,读者在看这类文章时需要注意文章的时间和背景,并采用严格的正式名称。
  
  目前sun还正在开发kvm的一个高性能版本--project monty虚拟机以用于下一代的移动信息处理设备。它采用了hot spot的技术,性能将比现有的kvm将近高一个数量级。
  
  虽然kvm作为sun的参考实现最经常被提到,不过并不等于一定要用kvm。其它公司的虚拟机只要满足相应的configuration里的定义,通过兼容性测试,一样可以作为configuration的虚拟机。目前ibm websphere micro environment,已经通过了"java poweredtm"认证,其j9虚拟机在相当多的平台上通过了j2me兼容性测试:
  
 勃勃生机的j2me技术简要标准介绍(图一)

  midp
  midp(mobile information device profile)定义了针对移动信息处理设备(主要指智能手机和一部分具有无线通信功能的pda)的图形界面,输入和时间处理,持久性存储,无线电话网络连接之上的一些消息处理(例如短消息),安全等等api,并且考虑到了移动信息设备的屏幕和内存限制。类似于j2se中的applet框架,midp提供了基于javax.microedition.midlet 包的midlet应用程序框架
  
  pda profile
  pda profile将在cldc的基础上,提供针对pda的用户界面,数据存储等扩展api。用户界面部分适用于有限大小和色彩的显示,为了支持开发者已有的经验基础,将是awt的一个子集,也有可能在awt子集之上加入midp用户界面组件。而存储机制将是简单的,平台无关的,类似于midp中的存储,为应用程序、数据、配置/环境信息提供简单的数据存储。
  
  cdc
  cdc(connected device configuration)针对有固定的不间断网络连接的共享连接信息设备,如置顶盒(set-top boxes),web-tv,支持internet的有屏幕电话,汽车娱乐/导航系统等。
  
  cdc要求为java提供至少2m的内存,这可以是rom加上ram,也就是说,java虚拟机和核心类库很有可能放在rom或者flash里。事实上,下一代无线手持设备完全可以满足cdc的需求。
  
  cdc是cldc的完整超集,包含了所有的cldc规范。另外,在相对充裕的条件下,它支持j2se的标准 java 虚拟机和一部分核心类库。
  
勃勃生机的j2me技术简要标准介绍(图二)

  其次,cdc支持标准的j2se虚拟机,这只是java平台的基础,并不包括建筑于平台基础之上的各种类库。特定设备需要的特定类库由相应的profile来定义。还是那个关键:configuration定义的是一类设备的与设备无关的最小平台,因此,诸如用户界面之类的类都被分离,留在profile中定义。
  
  虽然cdc支持标准的j2se虚拟机,但是标准的java虚拟机显然无法适应有限的资源环境。为此需要专门定义一个虚拟机,称为cvm(开始的时候,cvm代表compact virtual machine,但是后来sun的工程师认为这有可能与kvm相混淆,因此现在c并不代表特定的含义)。cvm除了支持标准j2se虚拟机的所有特性外,还支持许多嵌入系统需要的特性,更适合于在资源限制条件下运行,移植性很强。目前sun提供了linux和vxworks之上的cvm参考实现(reference implementation)。
  
  foundation profile
  foundation profile提供除了用户界面以外cdc所缺少的几乎所有标准j2se核心类库,作为其他所有profiles的基础(我们看到,多个profile可以共存,也可以叠加)。
  
  personal profile
  personal profile针对那些资源相对有限,但是需要高度的internet和web连接支持的设备,例如web-tv,汽车导航系统等等。它在foundation profile的基础上提供了网络特性以及支持java applets的 gui。
  
  personal profile的前身是personal java,personal java是sun为资源限制设备创建 java 平台版本的早期尝试。personal profile将与personal java 1.1和1.2向后兼容。
  
  rmi profile
  rmi profile在foundation profile的基础上提供rmi支持,将允许网络设备与其它系统应用程序(不一定是j2me的)交互操作。(

扫描关注微信公众号