说明
翻译KVM的文档,只是为了个人学习以做记录.如果有翻译不周到的地方,请指出,我会修正的.
为何翻译该文档
此KVM不是目前特别火的Kernel-based Virtual Machine(一个开源的系统虚拟化模块).而是一个JAVA 的虚拟机.是J2ME cldc 的一个实现.其源码的难度比hotspot简单多了.因此,想通过研读KVM,以加深对hotspot的理解
KVM简介
KVM
KVM(也称为K虚拟机或KJAVA虚拟机)是一种紧凑、可移植的Java虚拟机,它被专门设计用于小型、资源受限的设备,如蜂窝电话、寻呼机、私人记事本、移动互联网设备、销售点终端、家用电器等
KVM团队的高级设计目标是创建一个尽可能小的“完整”Java虚拟机,它将保持Java编程语言的所有中心方面,但它仍然运行在资源受限的设备中,只有几十或几百千兆字节的可用内存(因此命名为K)。更具体地说,kvm设计为
- 很小,虚拟机核心的静态内存占用从大约50-70千字节开始(取决于目标平台和编译选项)
- 干净且便携
- 模块化和可定制
- 尽可能“完整”和“快速”,而不牺牲其他设计目标。
KVM是用C编程语言实现的,因此它可以很容易地移植到各种平台上,在这些平台上可以使用ANSIC编译器。虚拟机是围绕一个简单的字节码解释器构建的,它具有各种编译时标志和选项,有助于移植工作和空间优化
KVM的开发是旨在提供模块化、可扩展的体系结构,用于开发和部署用户和嵌入式设备中的便携式、动态可下载和安全应用程序。这种更大的努力被称为Java 2 Micro Edio(也称为Java 2 ME或J2ME)
K虚拟机通常被用作以下J2ME技术标准的实现级基础:连接的、受限的设备配置(CLDC)和移动信息设备配置文件(MIDP)。KVM、CLDC、MIDP和Java 2微版本的进一步信息一般可在第1.2部分“相关文档”中列出的单独文件中获得。
KVM源于1998年初在太阳微系统实验室开发的一个名为“Spotless”的研究系统。关于Spotless系统的更多信息可在Sun实验室技术报告中获得:The Spotless system: implementing a Java system for the Palm connected organizer.
2.2 Differences between KVM 1.1 and KVM 1.0.3/4
KVM 1.1 和 KVM 1.0.3/4 之间的区别
kvm 1.1是第一个支持cldc规范版本1.1的kvm实现。此版本实现了CLDC1.1中添加的所有新功能,包括:
-
浮点数的支持
- 在cldc 1.1 中所支持的 浮点数的字节码
- Float 和 Double 已添加.
- 已将各种方法添加到其他库类以处理浮点值
-
弱引用的支持(J2SE中弱引用的一个子集)
-
Calendar, Date and TimeZone 类 重新设计为更符合J2SE。
-
已明确错误处理要求,并添加了一个新的错误类–>NoClassDefoundError。
-
在CLDC1.1中,线程对象具有名称,就像J2SE中的线程一样。方法thread.getname()已经被引入,thread类有一些从J2SE继承的新构造函数
-
各种小的库更改和错误修复,例如添加以下字段和方法:
- Boolean.TRUE and Boolean.FALSE
- Date.toString()
- Random.nextInt(int n)
- String.intern()
- String.equalsIgnoreCase()
- Thread.interrupt()
-
CLDC的最小总内存预算已从160千字节提高到192千字节,主要是因为增加了浮点功能。
-
规范文本进行修正,删除了过时的小节。
-
更详细的验证程序规范(“CLDC字节代码类型检查程序规范”)作为CLDC规范版本1.1的附录提供。
有关CLDC 1.0和1.1之间差异的更详细摘要,请参阅CLDC规范版本1.1。
kvm 1.1版本包含了先前kvm1.0.4版本的所有功能和修复。除了特定于CLDC规范1.1版的新功能外,与KVM 1.0.3相比,KVM 1.1的主要功能包括:
- 支持KNI.
- 重写类加载器,该类加载器以符合J2SE的方式支持错误处理
- 更易于移植到其他虚拟机的可移植运行时验证程序
- 各种小错误修复和增强
更多内容,可以到KVM 的网站(http://java.sun.com/products/kvm,该链接已失效)去查看
与早期的kvm/cldc版本不同,kvm 1.1实现不再包括网络协议实现、图形用户界面代码或超出cldc规范范围的其他组件。网络代码和用户界面组件在其他J2ME软件版本(如MIDP参考实现)中提供。