想要一探JDK內部的實現機制,最便捷的路徑之一就是本身編譯一套JDK。java
從http://openjdk.java.net/下載源碼,如 openjdk-6-src-b27-26_oct_2012.tar.gzlinux
解壓以後的目錄結構:jvm
Ubuntu 12.04,64位ui
在openjdk根目錄下面建立build.sh文件,內容爲編譯的設置和編譯命令.net
build.sh線程
設置語言 export LANG=C 設置Bootstrap JDK export ALT_BOOTDIR=/sdf/jvm/openjdk/jdk1.7.0_72 容許自動下載依賴 export ALLOW_DOWNLOADS=true 並行編譯的線程數,設置爲什麼CPU內核數量一致便可 export HOTSPOT_BUILD_JOBS=12 export ALT_PARALLEL_COMPILE_JOBS=12 export SKIP_COMPARE_IMAGES=true 使用預編譯頭文件,不加這個編譯會更慢一些 export USER_PRECOMPILED_HEADER=true 設置要編譯的內容 export BUILD_LANGTOOLS=true export BUILD_HOTSPOT=true export BUILD_JDK=true BUILD_DEPLOY=false BUILD_INSTALL=false 編譯結果所存放的路徑 export ALT_OUTPUTDIR=/sdf/jvm/openjdk/build unset JAVA_HOME unset CLASSPATH unset LD_LIBRARY_PATH 開始編譯 make 2>&1 | tee $ALT_OUTPUTDIR/build.log
在編譯過程當中有不少錯誤,只能說一步步解決。3d
下面列舉我在編譯過程當中遇到的問題:xml
1. You Seem to not have installed ALSA 0.9.1 or higherblog
(1)清除系統原有的alsa模塊rem
sudo apt-get remove linux-sound-base alsa-base alsa-utils
(2)從新安裝alsa模塊
sudo apt-get install xmlto libasound2-dev
sudo apt-get install linux-sound-base alsa-base alsa-utils
這是一類問題,基本就是缺乏依賴,只要成功安裝就能夠了
具體參考:
https://blog.csdn.net/qq_29729577/article/details/53706551
http://cduym.iteye.com/blog/1892416
http://caoxudong818.iteye.com/blog/1748869
2.
解決方案:使用jdk1.7.0_72做爲ALT_BOOTDIR
3.
https://blog.csdn.net/abountwinter/article/details/52369507
編譯成功的結果:
編譯的輸出:
驗證:
深刻理解Java虛擬機:JVM高級特性與最佳實踐
https://blog.csdn.net/qq_29729577/article/details/53706551
http://cduym.iteye.com/blog/1892416
https://blog.csdn.net/abountwinter/article/details/52369507
http://caoxudong818.iteye.com/blog/1748869