编译GCIH的方法

 

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。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值