因為對于Java裡的vtable,itable,有個地方還沒搞明白,不得已去下個OpenJDK來研究下。
本來很不願意去編繹OpenJDK,因為很有可能做的隻是無用功,還有可能要去解決各種找不到連結庫的問題。
不過,沒想到雖然有些麻煩,但是出人意料的順利。
環境:ubuntu 13.10,已經安裝了oracle jdk7。
首先下載下傳:
wget http://download.java.net/openjdk/jdk7u40/promoted/b43/openjdk-7u40-fcs-src-b43-26_aug_2013.zip
再用unzip解壓。
unzip openjdk-7u40-fcs-src-b43-26_aug_2013.zip
在解壓後的檔案夾裡,可以發現有一個“README-builds.html”的檔案,這個就是編繹的說明了。
或者在網上也有:
http://hg.openjdk.java.net/jdk7/build/raw-file/tip/README-builds.html#ubuntu
裡面雖然關于ubuntu的最後是9.04版本,不過可以對照着畫葫蘆:
安裝依賴相關的包:
sudo aptitude build-dep openjdk-7
因為我已經安裝了oracle jdk,是以就沒有再安裝openjdk7了,事實證明,不用安裝openjdk7也可以。
據README裡的說明,先用下面的指令來檢查下:
make sanity
如果提示下面的錯誤:
WARNING: LANG has been set to zh_CN.UTF-8, this can cause build failures.
Try setting LANG to 'C'.
則先執行:
export LANG=C
如果提示JAVA_HOME已經設定了:
ERROR: Your JAVA_HOME environment variable is set. This will
most likely cause the build to fail. Please unset it
and start your build again.
則用unset取消:
unset JAVA_HOME
還要設定下這個環境變量:
export ALT_BOOTDIR=/usr/lib/jvm/java-7-oracle
最後,可以用make all來編繹了。不過編繹一次太慢了。還有下面的這些編繹選項,在Makefile裡可以看到:
--- Common Targets --- \n\
all -- build the core JDK (default target) \n\
help -- Print out help information \n\
check -- Check make variable values for correctness \n\
sanity -- Perform detailed sanity checks on system and settings \n\
fastdebug_build -- build the core JDK in 'fastdebug' mode (-g -O) \n\
debug_build -- build the core JDK in 'debug' mode (-g) \n\
clean -- remove all built and imported files \n\
clobber -- same as clean \n\
可以考慮用make fastdebug_build來快速編繹。
最後生成的檔案當然在build檔案夾下了。
對于debug版,可以用下面的指令來檢視編繹出來的java示持哪些JVM的配置項:
./java -XX:+AggressiveOpts -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -XX:+PrintFlagsWithComments -version
如果是非debug,則可以使用下面的指令來輸出可用的JVM配置項:
./java -XX:+AggressiveOpts -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version