《深入理解JAVA虛擬機》-自己動手編譯JDK


環境

Ubuntu12.4-http://mirrors.163.com/ubuntu-releases/12.04/ --需要安裝純英文版,避免中文引起不必要的麻煩
OpenJDK7-https://download.java.net/openjdk/jdk7/

tips:由於OpenJDK部分代碼使用java語言編寫,所以需要一個編譯好的jdk來編譯(。。。。禁止套娃)
BootstrapJDK-jdk-7u80-linux-x64.tar.gz(可以到Oracle下載)

這里使用Oracle VM VirtualBox作為虛擬機演示

安裝依賴

1.安裝庫
sudo apt-get install build-essential gawk m4 libasound2-dev libcups2-dev libxrender-dev xorg-dev xutils-dev x11proto-print-dev binutils libmotif3 libmotif-dev ant libxt-dev libxtst-dev
如果一次安裝不成功,請多試幾次,或者更換源
2.解壓OpenJDK和BootstrapJDK到相應目錄下
OpenJDK:/home/pumpkin/j7/openjdk
BootstrapJDK:/home/pumpkin/j7/jdk1.7

因為jdk7年代已久,需要對openjdk的文件做些許修改:
openjdk/jdk/src/share/classes/java/util/CurrencyData.properties文件,將其中所有的10年前日期改為10年以內的,否則會報錯:time is more than 10 years from present

創建make腳本

在OpenJDK目錄內創建此make.sh腳本,修改其中的兩個路徑 ,並賦予執行權限

#語言選項,這個必須設置,否則編譯好后會出現一個HashTable的NPE錯
export LANG=C

#Bootstrap JDK的安裝路徑。必須設置。 
export ALT_BOOTDIR=/home/pumpkin/j7/jdk1.7

#允許自動下載依賴
export ALLOW_DOWNLOADS=true

#並行編譯的線程數,設置為和CPU內核數量一致即可
export HOTSPOT_BUILD_JOBS=2
export ALT_PARALLEL_COMPILE_JOBS=2

#比較本次build出來的映像與先前版本的差異。這個對我們來說沒有意義,必須設置為false,否則sanity檢查會報缺少先前版本JDK的映像。如果有設置dev或者DEV_ONLY=true的話這個不顯式設置也行。 
export SKIP_COMPARE_IMAGES=true

#使用預編譯頭文件,不加這個編譯會更慢一些
export USE_PRECOMPILED_HEADER=true

#要編譯的內容
export BUILD_LANGTOOLS=true 
#export BUILD_JAXP=false
#export BUILD_JAXWS=false 
#export BUILD_CORBA=false
export BUILD_HOTSPOT=true 
export BUILD_JDK=true

#要編譯的版本
#export SKIP_DEBUG_BUILD=false
#export SKIP_FASTDEBUG_BUILD=true
#export DEBUG_NAME=debug

#把它設置為false可以避開javaws和瀏覽器Java插件之類的部分的build。 
BUILD_DEPLOY=false

#把它設置為false就不會build出安裝包。因為安裝包里有些奇怪的依賴,但即便不build出它也已經能得到完整的JDK映像,所以還是別build它好了。
BUILD_INSTALL=false

#編譯結果所存放的路徑
export ALT_OUTPUTDIR=/home/pumpkin/j7/pumpkinJDK7

#這兩個環境變量必須去掉,不然會有很詭異的事情發生(我沒有具體查過這些“”詭異的事情”,Makefile腳本檢查到有這2個變量就會提示警告“)
unset JAVA_HOME
unset CLASSPATH

make 2>&1 | tee $ALT_OUTPUTDIR/build.log

運行make.sh

openjdk#sh make.sh
我在虛擬機中編譯,大約需要23min

編譯好的java -version 虛擬機信息中心會帶有用戶信息


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM