2.2.7 JVM方面的差异
CLDC参考实现中包括一个被称为KVM的虚拟机。可以想象到,KVM缺少J2SE JVM的一些特性。
KVM和它包含的库中缺少的主要特性包括:
v 弱引用——让你保留一个指向会被垃圾收集器收集的对象的引用。
v 反射——在运行期查看代码的能力。
v 线程群组和守护线程——高级线程控制(极少使用)。
v JNI(Java本地接口)——编写自己的本地代码,在沙箱模型中开发这是不适当的。
v 用户自定义的类装载器——用来加入自己的类装载机制(很少使用)。
如果你有一个宏大的计划要用到上面的某些特性,那运气就不好了。值得感谢的是,可以不要这些特性,特别是在缺乏资源的环境。
1.反射
反射是Java可以在运行的时候检查执行代码的特性。它意味着可以从代码中检查类、对象、方法和字段中的代码。KVM不支持任何形式的反射,那也意味着无法使用从反射核心派生出来的功能的特性,例如JVMDI(Java虚拟机调试接口)、RMI(远程方法调用)、对象序列化和性能评测工具集。
在进行游戏编程的时候,我们不需要这些特性。例如RMI,可以通过网络执行远程方法,实际上它并没有多大用处,因为对于典型的多人游戏开发,它有一些太重量级了。我们可以自己编写一个简单的系统来实现同样的功能。对象序列化对于保存和装载游戏状态也许会有用,但是我们自己编写代码来实现也不困难。
然而性能评测工具也是缺乏的,Sun的WTK(无线开发工具包)提供了一个有限的性能评测工具来满足我们的需要。没有性能评测工具,只是意味着无法编写自己的性能评测系统。同样地,也不能编写自己的调试系统。
2.用户定义的类装载器
用户定义的类装载器是另外一个从KVM删掉的特性。它主要是按照用户提供的机制来重新配置或者替换原来的类载入机制。但是,如果可以加入一个新的类装载器将安全机制完全“突破”,沙箱安全模型就不能很好地工作,所以UDCL(User-Defined Class Loaders)删除了这个特性。总之这不是在常规的游戏开发中真正能用到的特性。






