文章来源:J2ME开发网 (节选自《J2ME中文开发教程》)
1 CLDC包含的功能
在CLDC1.0版本中定义了以下功能:
1)Java核心语言与Java虚拟机的特性
2)核心Java类库
3)输入/输出
4)对网络的支持
5)对安全性的支持
6)对国际化的支持
1)对应用程序生命周期的管理
2)用户界面
3)事件处理
4)高级应用程序模式(这里指用户与应用程序的交互)
CLDC包含了一个基本的J2ME运行环境,其中包括虚拟机和核心的java类库。作为专门针对于小型设备的配置,CLDC对J2SE类库进行了大量的简化,其类库只保留了java 规范中定义的最核心的3个包,即java.iojava.lang和java.util,并重新定义了一个新的包javax.microedition。这里你可以通过前缀来区别:java.表示核心的java包,javax.表示标准java扩展包。
这里要注意的是在CLDC中定义的javax.microedition包为javax.microedition.io,用来支持通用连接框架(GCF,Generic connection framework)。CLDC中的包和所对应的功能如下所示:
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.不支持浮点数据类型(没有float和double)
因为很多使用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对象的控制,如使用Hashtable和Vector来存取多个Thread对象。
6.不支持类实例(class instance)的终结(finalization)
CLDC类库不包含java.lang.Object.finalize()方法,因此类对象的终结是不支持的。对于应用CLDC的设备来说,对象终结相对于它所起的作用来说实现起来过于复杂,并不被需要。
7.不支持弱引用(weak references)
8.有限的错误处理(error handling)
在J2SE中定义了大量的类用来描述各种错误和异常,而CLDC仅仅包含有限的几个J2SE的核心类库,因此大部分java.lang.Error的子类都未被支持,这包括异步异常。这是因为在嵌入式系统中,应用程序并不期望获得设备的出错处理机制;定义和运行出错处理需要较大的虚拟机的开销,而这些出错的代码信息对于连用户界面都没有的有限连接设备来说是没有用处的。
分享到:
相关推荐
J2ME平台实现的水波倒影效果,包含CLDC1.1和CLDC1.0两个版本
j2me cldc1.0的json实现,用来做mobile ajax的数据解析很有用。
java,j2me开发资料,有关cldc,编写手机程序使用
j2me_cldc-1_1-fcs-src-winunix.rar cldc1.1源码
Sun J2me Cldc 官方源码资料,Cldc 1.1版本资料,一个专门用于J2ME手机游戏的开发包,很多Java手机游戏开发者都会用到这个包。
j2me cldc kvm移植 unix
Java CLDC MIDP底层编程实例源码,收集自Sun官方的开源项目phoneME,J2ME游戏编程时你会用到,你可以由此进一步探讨JavaME在Java底层的实现,可能对新手有些难度。
cldc参考实现 包括kvm
自己写的测试手机CLDC版本和MIDP版本,只有几行代码,但对于PPC手机来说还是有点用处。在多普达818上测试过,可以运行,使用移动的百宝箱虚拟机。
官方版本,亲测可用
该源码实现了实现CLDC与MIDP底层编程功能,不但可以收集自Sun官方的开源项目phoneME等,而且在J2ME游戏编程时就会用到,喜欢的朋友可以下载学习一下。
J2ME CLDC1.1官方源代码, 有研究J2ME虚拟机移植的朋友共享
kAWT 0.90 for Palm SUNs J2ME CLDC KVMkAWT 0.90 for Palm SUNs J2ME CLDC KVMkAWT 0.90 for Palm SUNs J2ME CLDC KVMkAWT 0.90 for Palm SUNs J2ME CLDC KVM
第三章 CLDC编程概述.ppt 第三章 CLDC编程概述.ppt 第三章 CLDC编程概述.ppt
Sun JavaTM Wireless Toolkit for CLDC 的用户手册
sum kvm的东东,包括: midp 2.0 cldc 1.0.4
今天忽然想开发j2me怀旧一下,发现居然哪里都下不到以前的索爱开发sdk了! 于是,费尽周折,从国外的网站上好不容易下了一个备份,同时我还下载了2.5.03和2.5.04版本,统统免费!这都10几年前的玩意了,有点互联网...
辅助包,CLDC (Connected Limited Device Configuration,有限连接设备配置) 是为运行在资源非常有限的设备(例如寻呼机或者手机)上的J2ME应用程序制订的架构
这是一个CLDC的帮助文档,和需要的朋友分享一下
用在嵌入式设备上的JAVA虚拟机源码.并且已经修改过.