说明

翻译KVM的文档,只是为了个人学习以做记录.如果有翻译不周到的地方,请指出,我会修正的.

为何翻译该文档

此KVM不是目前特别火的Kernel-based Virtual Machine(一个开源的系统虚拟化模块).而是一个JAVA 的虚拟机.是J2ME cldc 的一个实现.其源码的难度比hotspot简单多了.因此,想通过研读KVM,以加深对hotspot的理解

编译要求

为了能够编译kvm代码库,您必须有一个能够编译符合ANSI的C文件的C编译器。编译器必须定义基本的C类型,如下所示:

类型

描述

char

8bit,可以是有符号的也可以是无符号的

signed char

有符号的 8bit

unsigned char

无符号的 8bit

short

有符号的16bit

unsigned short

无符号的 16bit

int

有符号,可以是16bit也可以是32bit

unsigned int

无符号,可以是16bit也可以是32bit

long

有符号 32位

unsigned long

无符号 32bit

void *

32bit,指针

如果你的J2ME配置或配置文件支持浮点数字,则编译器必须支持下面所示的浮点类型:

TABLE 2  –  浮点类型

类型

描述

float

32bit的浮点值

double

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位含义。