用在CLASSPATH里面的路径分割符。这个设置只在一
些为命令行系统设计的默认的类装载器时使用。
#defineROMIZING1如果开启该选项,//开启或关闭类的预连接和预装载支持。那么KVM将会预连接所有系统类到虚拟机里面,将会在很大
程度上加快
程序的启动。
#defineUSE_JAM0//添加或删除可选的JAM模块。#defineASYNCHRONOUS_NATIVE_FUNCTIONS0//该选项控制是否使用可选的异步本地方法。#defineUSE_KNI1//启用或关闭KNI。这个选项只有在1.04或者之后的虚拟机里面才有,如果启用该选项,系统将会包含一些KNI所需要的代码。如果并不想用KNI,建议关掉这个选项,以便使原来的
本地方法运行的更快。
gnumakeROMIZING=false//关闭预编译和预链接选项。gnumakeDEBUG=true。//开启Java-leveldebugger和VM-internaldebugginggnumakeUSE_JAM=true//开启使用JAM选项。gnumakeGCC=true//使用GCC编译。gnumakeUSE_KNI=false//关闭KNI选项。首先取得JDK开发包。可以从下面的网址下载:http://java.sun.com/j2se/1.4.2/download.html
2移植要点
与移植Linux内核一样,首先要修改Makefile文件,指定编译器。移植前:
技术创新
ifeq(¥(GCC),true)CC=gcc
移植后:ifeq(¥(GCC),true)CC=arm-linux-gcc其次,在Makefile文件的开始处添加下面语句,设定编译平台为linux:
1.1.3存储分配设置选项#defineDEFAULTHEAPSIZE65024/*0xFE00*/大小应该在16k ̄64M之间能被4整//JAVA堆栈大小设置。除的数,不过一般在编译时通过修改Makefile来达到修改大小的目的。需要注意的是,从1.03版本以后,堆栈的大小可以通过
命令行参数来设置。
exportPLATFORM=
linux 另一种设定编译平台的方式是在编译时添加“PLAT-FORM=linux”参数。如果要移植1.1版本的KVM,还要修改kvm/VmUnix/src/runtime_md.c文件的一些内容,找到Initialize-FloatingPoint函数并加以修改,注释掉关于浮点的内容:
#defineINLINECACHESIZE128前提是将ENABLEFASTBYTECODES//设置在线缓存大小。设置为开(on)。KVM的在线缓存机制是利用了Deutsch和Schiffman在80年代早期所推崇的技术,这里的大小是以在线缓存的
数量表示的。
voidInitializeFloatingPoint(){#ifdefined(LINUX)&&PROCESSOR_ARCHITECTURE_X86/*SettheprecisionFPUtodoubleprecision*///fpu_control_tcw=(_FPU_DEFAULT& ̄_FPU_EXTEND-ED)|_FPU_DOUBLE;//_FPU_SETCW(cw);#endif}编译KVM也需要几个过程。首先编译preverify:myhost:/java#cdj2me_cldc\tools\preverifier\build\linuxmyhost:/java#make
然后编译KVMmyhost:/java#cdj2me_cldc\kvm\VmUnix\buildmyhost:/java#makemyhost:/java#filekvmkvm:ELF32-bitLSBexecutable,ARM,version1(ARM),for
#defineSTACKCHUNKSIZE128//设置新分配的栈结构块的大小。减小这个值可以减少一个新的java线程被创建时的花销,但是也会使虚拟机执行那些需要
大量栈空间的程序时变慢。
#defineSTRINGBUFFERSIZE512//设置虚拟机内部进行字符变量操作时静态分配的空间大小。1.1.4垃圾回收机制选项#defineENABLE_HEAP_COMPACTION1//开启或关闭堆栈压制的垃圾回收机制。注意这个机制不
能用在在那些存储空间不连续的系统。
#defineEXCESSIVE_GARBAGE_COLLECTION0//如果这个选项被设置为非0,将会使虚拟机在每次分配
中都执行垃圾回收,这将会更容易的发现垃圾回收
问题,但是