说明

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

为何翻译该文档

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

目录结构

概览

将发布包解压到您选择的任何目录中。这将创建一个包含以下子目录的目录j2me_cldc:

  • api
  • bin
  • build
  • doc
  • jam
  • kvm
  • tools

这些目录的结构见下表

TABLE 3  –   目录结构
子目录
描述
api
包含与当前版本一起提供的Java库源代码
bin
包含所有可执行文件和编译后的java 库的class 文件
build
包含所有的makefile 文件
doc
包含所有的文档.
jam
包含可选的JAM (Java Application Manager)组件的源代码,该组件由KVM提供
kvm
包含KVM的源码
tools
包含该版本所提供的一系列的工具类(JavaCodeCompact, preverifier, KDWP Debug Proxy)

kvm/VmCommon 目录介绍

kvm的所有公共的、与平台无关的源代码都位于kvm/vmcomon/src/目录中。所有常见的include文件都在kvm/vmcomon/h/目录中。

平台特定的源文件和包含文件应放在kvm/vmport/src/和kvm/vmport/h/ 目录中,其中port将替换为平台名称(例如kvm/vmwin、kvm/vmplot、kvm/vmunix)。

有些平台可能选择创建kvm/vmport/build/subdirectory,该目录保存属于生成过程的文件,但本身不是源代码的一部分.

下表概述了kvm/vmcommon/src/和kvm/vmcommon/h/中包含的kvm源代码文件。

TABLE 4  –   VmCommon中的文件
文件名
描述
StartJVM.c
启动虚拟机和命令行参数的读取
bytecodes.c
重新设计字节码解释器的定义.
cache.h
cache.c
用于加快方法查找和支持“快速分派”字节码的内联缓存操作。
class.h
class.c
用于表示Java类的内部运行时数据结构和操作.
events.h
events.c
事件系统的实现
execute.h
execute.c
解释器执行宏和重新设计的字节码解释器所需的操作(自kvm 1.0.2以来).
fields.h
fields.c
用于表示字段和方法的内部运行时数据结构和操作。
fp_math.h
fp_math.c
浮点数操作接口
frame.h
frame.c
栈帧和错误处理
garbage.h
garbage.c
collector.c
collectorDebug.c
垃圾收集和内存管理
global.h
global.c
各种全局变量和定义
hashtable.h
hashtable.c
Hashtable的实现,虚拟机内部使用
interpret.h
interpret.c
字节码解释程序。请注意,从kvm 1.0.2开始,实际的解释器代码和字节码定义位于其他文件中( bytecodes.cexecute.hexecute.c)。
kni.h
kni.c
KNI 支持
loader.h
loader.c
class加载和class 文件格式检查。
log.h
log.c
调试和分析的日志记录/诊断操作
long.h
以可移植方式处理64位操作的特殊宏。
main.h
编译选项和系统范围的默认设置。
messages.h
错误和异常信息
native.h
native.c
nativeCore.c
本地函数表的操作和核心本地库函数
pool.h
pool.c
用于表示常量池的运行时数据结构和操作
profiling.h
profiling.c
用于分析虚拟机执行情况的数据声明和操作.
property.h
property.c
访问Java系统属性的操作。
rom.h
romizer(javadecompact工具)所需的宏。
runtime.h
需要为每个KVM平台定义的特定于机器的操作的功能模板。
stackmap.c
用于支持精确垃圾收集的StackMap操作。
thread.h
thread.c
用于多线程和Java线程管理的内部运行时数据结构和操作。
verifier.h
verifier.c
verifierUtil.h
verifierUtil.c
class 文件的检验

kvm/VmExtra 目录介绍

目录kvm/vmextra/包含可能对大量端口有用的其他组件。这些文件包括Windows/Unix最常用的网络协议的实现、在具有常规文件系统的目标平台上支持类加载的文件接口以及JAR文件 reader/inflater。该目录还包含Java级调试器和KDWP(KVM调试线协议)接口的实现。

此外,该目录还为异步事件处理定义了一些可选宏,并定义了在非嵌入式、基于命令行的目标平台(如Windows和Solaris)上所需的虚拟机启动操作.

TABLE 5  –   VmExtra中的文件
文件名
描述
async.h
async.c
用于支持异步I/O的宏
loaderFile.c
对于那些具有“真实”文件系统的平台,文件系统、类加载器和JAR阅读器之间的低级绑定。
main.c
具有文件系统并支持从命令行启动VM的平台的默认主程序。
jar.h
inflate.h
inflateint.h
inflatetables.h
jar.c
inflate.c
JAR 文件 读取和解压缩
resource.c
基于流的外部资源读取协议的实现
debugger.h
debugger.c
debuggerCommands.h
debuggerStreams.h
debuggerInputStream.c
debuggerOutputStream.c
debuggerSocketIO.c
Java级调试器和KDWP(KVM调试线协议)接口的实现

kvm/VmExtra/src/fp 目录介绍

目录kvm/vmextra/src/fp包含支持CLDC规范1.1版所需的各种浮点函数所需的库函数。有关浮点支持的更多信息,请参阅第10章。

Logo

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

更多推荐