说明
翻译KVM的文档,只是为了个人学习以做记录.如果有翻译不周到的地方,请指出,我会修正的.
为何翻译该文档
此KVM不是目前特别火的Kernel-based Virtual Machine(一个开源的系统虚拟化模块).而是一个JAVA 的虚拟机.是J2ME cldc 的一个实现.其源码的难度比hotspot简单多了.因此,想通过研读KVM,以加深对hotspot的理解
编译要求
为了能够编译kvm代码库,您必须有一个能够编译符合ANSI的C文件的C编译器。编译器必须定义基本的C类型,如下所示:
类型 | 描述 |
| 8bit,可以是有符号的也可以是无符号的 |
signed | 有符号的 8bit |
unsigned | 无符号的 8bit |
| 有符号的16bit |
unsigned | 无符号的 16bit |
| 有符号,可以是16bit也可以是32bit |
unsigned | 无符号,可以是16bit也可以是32bit |
| 有符号 32位 |
unsigned | 无符号 32bit |
| 32bit,指针 |
如果你的J2ME配置或配置文件支持浮点数字,则编译器必须支持下面所示的浮点类型:
TABLE 2 – 浮点类型
类型 | 描述 |
| 32bit的浮点值 |
| 64bit的浮点值 |
所有的KVM实现都支持Java类型的long。编译器最好支持64位整数,但是这不是必需的。在第9章“64位支持”中讨论了JavaType的移植。
您的编译器必须有一些方法来指示要搜索的其他目录的“includes”形式:
#include <filename>
我们的引用实现只在具有32位指针的机器上进行了测试,而这些机器不需要任何类型的“远”指针。我们不知道它是否能在具有其他大小指针的平台上成功运行。
已使用以下编译器成功编译代码:
- 在Solaris上使用Sun C Compiler 5.0, 5.2和 5.3
- 在Red Hat linux 上使用GNU C 2.91.66 (egcs-1.1.2) 编译器
- 在Solaris和Windows NT 4.0上使用GNU C 2.95.2编译器
- 在Windows NT 4.0 和 Windows 2000上使用Microsoft Visual C++ 6.0 专业版 进行编译
kvm源代码库中唯一的非ansi c c特性是使用64位整数算法。有关64位支持的更多信息,请参阅第9章。
请注意,在Java编程语言中,类型long始终是64位。表1假定,与大多数当前的C实现一样,long类型表示32位的数量。该文档使用“Java类型long”一词来引用64位含义。