TaobaoJVM目前主要支持amd64(X86_64)平台
所需环境:
操作系统:Linux(kernel < 3.0)
软件:gcc(<4.7), make, Mercurial, 已安装的JDK6
具体步骤:
1.目前的TaobaoJVM基于OpenJDK6b24对应的hotspot,因此首先从OpenJDK官网上下载其对应的repo:
hg clone http://hg.openjdk.java.net/jdk6/jdk6/hotspot/ hotspot
2.进入hotspot目录,将版本调整到准确的changeset:
hg up -r 2419
3.按照编号顺序依次打上TaobaoJVM的patch,例如:
hg patch TaobalJVM1.patch
4.打完所有patch后,在make文件夹下执行如下命令进行build:
make product LP64=1 ALT_BOOTDIR=$JAVA_HOME HOTSPOT_BUILD_JOBS=8
注:debug版本需将“product”改为“fastdebug”或“jvmg”,JAVA_HOME需要设置一个已经安装的JDK6的路径,HOTSPOT_BUILD_JOBS可以根据机器CPU核数进行合理设置。生成的JVM文件libjvm.so会在hotspot/build/linux/linux_amd64_compiler2/product/下,将其放入已安装的JDK6的jre/lib/amd64/server(client模式则为client)目录下即可取代原有的JVM,也可以在“amd64”里新建一个目录,比如“test”,将libjvm.so放入其中,启动Java程序时加上参数-XXaltjvm=test即可使用。
GC-Invisible Heap的使用:
1.将[source code 1]的链接另存一下,按照上面的说明将该patch打入TaobaoJVM,需要说明的是该patch只支持X86_64平台和CMS算法。
2.将[source code 2]的链接另存为GCIH_Stub.h ,将[source code 3]的链接另存为GCIH_Stub.c,这两个文件用gcc编译成一个libgcih.so文件,命令如下: gcc -I$JAVA_HOME/include/ -I$JAVA_HOME/include/linux/ -fPIC -w -shared -o /lib64/libgcih.so ./*.c 编译出来的libgcih.so 使用的时候可以直接放到libjvm.so同目录下,也可以放到其他目录下,但是JVM启动参数一般需要加-Djava.library.path来指定该路径。
3.将[source code 4]的链接另存为GCInvisibleHeap.java ,将该文件添加到java项目中,直接调用里面的接口即可(注意,该文件的包名不要随便修改,必须和GCIH_Stub.c里面的代码同时修改,不然会初始化失败)。
4.如果使用gcih,则需要在JVM的启动参数加上如下是三个参数: -XX:+UseGCIH -XX:GCIHSize=1024m -XX:GCIHBaseAddress=25769803776 其中第一个参数是说要用gcih,第二个参数指定gcih堆的大小,第三个参数指定gcih堆的起始地址,这三个参数缺一不可。
5.最后需要注意的是使用gcih,必须指定CMS gc算法,同时必须保证移入gcih堆的数据是只读,不然一般而言会crash。