`
izuoyan
  • 浏览: 8950156 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

文章来源:J2ME开发网 (节选自《J2ME中文开发教程》)

1 CLDC包含的功能

CLDC1.0版本中定义了以下功能:

1Java核心语言与Java虚拟机的特性

2)核心Java类库

3)输入/输出

4)对网络的支持

5)对安全性的支持

6)对国际化的支持

2 CLDC不包含的功能

1)对应用程序生命周期的管理

2)用户界面

3)事件处理

4)高级应用程序模式(这里指用户与应用程序的交互)

3 CLDCJ2SE的关系

CLDC包含了一个基本的J2ME运行环境,其中包括虚拟机和核心的java类库。作为专门针对于小型设备的配置,CLDCJ2SE类库进行了大量的简化,其类库只保留了java 规范中定义的最核心的3个包,即java.iojava.langjava.util,并重新定义了一个新的包javax.microedition。这里你可以通过前缀来区别:java.表示核心的java包,javax.表示标准java扩展包。

这里要注意的是在CLDC中定义的javax.microedition包为javax.microedition.io用来支持通用连接框架GCFGeneric connection frameworkCLDC中的包和所对应的功能如下所示

CLDC 对应的功能
java.io 标准的输入/输出功能,J2SE java.io包的子集
java.lang 核心语言包,J2SE的子集
java.util 实用类
javax.microedition.io 通用连接框架类及接口

javax.microedition中其他的包定义了CLDC中没有定义的功能,如对应用程序生命周期的管理、用户界面(UI)、事件处理模式、永久性存储和用户与应用程序的交互等。这些功能的定义是由Profile (即MIDP)来完成的。

4 CLDC核心类库与J2SE的主要区别

由于CLDC主要针对16位、32位主频在16MHz以上的处理器,设备内存只有512KB,甚至更少,而目前Windows平台下运行的JVM需要的最小内存为16M。因此CLDC所使用的虚拟机和核心类库与J2SE的并不相同。

1不支持浮点数据类型(没有floatdouble

因为很多使用CLDC的设备硬件都不支持浮点运算,而且处理浮点运算需要较大的内存。因此在CLDC1.0中,并没有要求虚拟机支持浮点数据类型。

9) dadd

10) dmul

11) fadd

12) fmul

13) i2d

14) dalaod

15) dneg

16) faload

17) fneg

18) i2f

19) dastore

20) drem

21) fastore

22) frem

23) l2d

24) dcmpg

25) dreturn

26) fcmpg

27) freturn

28) l2f

29) dcmpl

30) dstore

31) fcmpl

32) fstore

33) newarray(double)

34) dconst_0

35) dstore_x

36) fconst_0

37) fstore_x

38) newarray(float)

39) dconst_1

40) dsub

41) fconst_1

42) fsub

43)

44) ddiv

45) d2f

46) fdiv

47) f2f

48)

49) dload

50) d2i

51) fload

52) f2i

53)

54) dload_x

55) d2l

56) fload_x

57) f2l

58)

CLDC不支持的浮点数据类型

对于CLDC的应用,Sun使用了和J2SE相同的编译器,这使得使用浮点数据的类及对象在编译的时候可以正常通过。因此Sun引入了类审核机制来阻止未经定义的类调入虚拟机。

2不支持JNI (the Java Native Interface )

CLDC不提供native code的支持,除了因为设备内存有限外,还出于安全性的考虑。因为CLDC中缺少完整的安全性模型,禁用了这些J2SE的特性可以使潜在的安全风险降到最低。

3不支持以及用户自定义的Java级的类载入器(class loaders)

CLDC不允许用户自定义类载入器。按照CLDC规范的要求,类的载入是不能被覆盖、替换和修改的。和JNI类似,这些是出于安全方面的一些考虑。

4不支持反射(reflection)

不支持java.lang.reflect包以及java.lang.Class中和reflection有关的函数。其目的主要是节省内存占用。

5不支持线程组thread groups或守护线程daemon threads

CLDC提供了对线程的支持,也支持多线程,但是线程组和守护线程是不被允许的。每个线程都要生成独立的Thread对象来实现。如果应用程序想实现对一组线程的操作,则必须在应用程序的级别上自行实现多个Thread对象的控制,如使用HashtableVector来存取多个Thread对象。

6不支持类实例(class instance)的终结(finalization

CLDC类库不包含java.lang.Object.finalize()方法,因此类对象的终结是不支持的。对于应用CLDC的设备来说,对象终结相对于它所起的作用来说实现起来过于复杂,并不被需要。

7不支持弱引用weak references

8有限的错误处理error handling

J2SE中定义了大量的类用来描述各种错误和异常CLDC仅仅包含有限的几个J2SE的核心类库因此大部分java.lang.Error的子类都未被支持这包括异步异常。这是因为在嵌入式系统中,应用程序并不期望获得设备的出错处理机制;定义和运行出错处理需要较大的虚拟机的开销,而这些出错的代码信息对于连用户界面都没有的有限连接设备来说是没有用处的。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics