说明

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

为何翻译该文档

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

虚拟机启动

在不同的KVM平台中,虚拟机启动可能会有很大的不同。默认情况下,KVM支持基于命令行的Java虚拟机启动,但是对于不需要基于命令行启动的环境,可以很容易地修改虚拟机。

命令行启动

本小节描述从命令行启动KVM时虚拟机的启动约定。

文件vmultra/src/main.c提供了main()的默认实现。从命令行调用虚拟机,如下所示:

    kvm [option]* className [arg]* 

其中option 可以为:

-version 
-classpath <list of directories> 
-heapsize <heap size parameter> 

必需的classname参数指定要调用其方法static main(string argv[])的类。类名称之外的所有参数都是未解释的字符串,这些字符串构成单个字符串[]对象,并作为单个参数传递给主方法。

-classpath选项允许用户定义kvm从中读取类文件的目录。参数是一个字符串,其中目录由路径分隔符分隔。路径分隔符的值在Windows平台上通常为“;”,在Unix平台上为“:”。

-heapsize选项(在KVM 1.0.3中引入)允许用户手动设置KVM在虚拟机启动时分配的Java堆大小。堆大小可以从16千字节到64兆字节。堆大小可以用字节(如32768)、千字节(如32K或32K)或兆字节(如1M或1M)指定。注意,当堆大小以字节为单位定义时,kvm会自动将堆大小数字舍入到下一个可以被4整除的数字。

此外,如果虚拟机是在启用INCLUDEDEBUGCODE模式的情况下编译的,那么表6(第六章)中给出的跟踪选项是可用的

当使用Java级调试接口时,可以使用附加命令行选项来控制调试器。详见第16章。

main(int argc,char**argv)的默认实现使用argv调用函数startjvm(),其中所有选项都已删除,argc已适当递减。

可选的虚拟机启动策略

如果实现没有从命令行启动虚拟机(例如,如果使用图形环境启动应用程序),则必须安排代码使用适当的参数调用startjvm()

使用JAM (Java Application Manager)

许多KVM端口运行在资源受限的设备上,这些设备缺少桌面操作系统中常见的许多功能,例如命令行、图形文件管理器,甚至文件系统。为了方便KVM移植到这样的平台上,KVM提供了一个被称为JAM(Java应用程序管理器)的设施的示例实现。

在编译级别,可以使用标志打开或关闭JAM

#define USE_JAM 1 

当使用gnumake构建kvm时,以下命令会在启用JAM的情况下自动构建系统:

gnumake USE_JAM=true 

如果JAM编译到KVM中,则必须使用-jam命令行标志激活它。

JAM实现假定可以使用HTTP协议以JAR文件的形式下载应用程序。JAM通过HTTP读取JAR文件和相关描述符文件的内容,并以主类作为参数启动KVM。

由于JAM是主机操作系统和虚拟机之间的接口,所以它可以被用来作为特定于设备的图形Java应用程序管理和启动环境(“微浏览器”)的起点,或者作为虚拟机测试的测试线束。JAM引用实现提供了一种特殊的“重复”模式,它允许jam来运行大量Java应用程序(例如,测试用例),而不必每次重新启动虚拟机。

请参阅第15章“Java应用程序管理器(JAM)”,以了解关于jam的进一步信息。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐