国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
走進JVM之一 自己編譯openjdk源碼

想要深入了解JVM,就必須了解其實現(xiàn)機制。了解JVM實現(xiàn)的最好方法便是自己動手編譯JDK。好了,讓我們開始吧!

1.  準備工作

  • 獲取OpenJDK源碼

本次編譯選擇的是OpenJDK7u,官方源碼包:https://jdk7.java.net/source.html

  • 系統(tǒng)需求

為了提高效率,盡量選擇Linux MacOS作為編譯平臺。本次使用Ubuntu12.04進行編譯。仔細閱讀源碼包中README-builds.html文檔,就可以構(gòu)建編譯環(huán)境了。

   

2.  配置編譯環(huán)境

  • 編譯依賴

OpenJDK包括虛擬機Hotsport | JDK API | JAXWS | JAXP等。需要各種編譯依賴,包括C++,C的編譯環(huán)境,編譯JavaJDK(稱為Bootstrap JDK),還有用于執(zhí)行java代碼的Ant腳本等等。這些依賴在Linux中都可以通過命令一次安裝完成。

sudo apt-get install build-essential gawk m4 libasound2-dev libcups-dev libxrender-dev xorg-dev xutils-dev x11proto-print-dev binutils libmotif3 libmotif-dev ant

 

當然,也可以在命令里面加上openjdk-6-jdk,但是由于openjdk在后面的編譯中出現(xiàn)了bug,所以還是建議大家安裝Oracle jdk。注意,bootstrap JDK版本必須在6以上。

  • 環(huán)境變量

OpenJDK在編譯時會讀取許多環(huán)境變量,所以必須對Linux的環(huán)境變量進行配置。使用VIM編輯/etc/profile。 vim /etc/profile

具體在profile中添加的環(huán)境變量如下

export LANG=C#BootStrap-JDK的安裝路徑,替換為自己bootstrap-JDK的路徑export ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk-i386#同上,我之前使用的是openjdk編譯的,后面運行hotspot時出現(xiàn)問題替換為oracleJDK,讀者可以直接替換為OracleJDKexport ALT_JDK_IMPORT_PATH=/usr/lib/jvm/java-6-openjdk-i386#要編譯的內(nèi)容,讀者可以根據(jù)需要自行選擇export BUILD_LANGTOOLS=true#export BUILD_JAXWS=false#export BUILD_JAXP=false#export BUILD_CORBA=falseexport BUILD_HOTSPOT=trueexport BUILD_JDK=trueexport SKIP_COMPARE_IMAGES=trueBUILD_DEPLOY=falseBUILD_INSTALL=false#編譯結(jié)果存放的路徑,建議存放在openjdk源碼中build文件夾export ALT_OUTPUTDIR=/usr/dev/jvm/openjdk/buildexport ALLOW_DOWNLOADS=true#這兩個環(huán)境變量需要去掉,不然會出問題unset JAVA_HOMEunset CLASSPATH

 

添加完成后,進入openjdk源碼路徑,通過make sanity命令來檢查設(shè)置是否正確,如果正確,會返回Sanity check passed

   

3.  開始編譯OpenJDK

  • 使用make命令

openjdk目錄下,輸入make命令,正常情況下大概需要30分鐘左右,具體速度根據(jù)機器性能決定。編譯正常結(jié)束后,會出現(xiàn)日志清單展示內(nèi)容,如圖

  • 查看編譯結(jié)果

進入build/j2sdk-image目錄下,查看整個JDK的編譯結(jié)果,運行java –version

4.  運行HotSpot

  • 編輯env.sh

虛擬機的輸出結(jié)果存放在build/hotspot/outputdir/linux_i486_compiler2路徑下,如圖

使用VIM編輯product目錄下的env.sh

我們發(fā)現(xiàn)里面已經(jīng)有了JAVA_HOME CLASSPATH HOTSPOT_BUILD_USER等環(huán)境變量,我們還需要添加一個LD_LIBRARY_PATH,否則在運行時還會出現(xiàn)問題。

LD_LIBRARY_PATH=.:${JAVA_HOME}/jre/lib/i386/native_threads:${JAVA_HOME}/jre/lib/i386:export LD_LIBRARY_PATH

 

  • 執(zhí)行命令啟動JVM

使用如下命令,啟動虛擬機,輸出版本號

. ./env.sh./gamma –vesion

 

成功結(jié)果如圖

至此成功編譯運行OpenJDK7,下面講講過程中遇到的問題。

   

5.  編譯運行過程中可能會遇到的問題

  • OpenJDK6.0bug

使用OpenJDK6.0作為bootstrap JDK的話,在編譯及運行過程中可能會出現(xiàn)類似于這樣的錯誤,運行./gamma時也可能出現(xiàn),這類錯誤都屬于OpenJDK-6中的bug

relocation error: /usr/lib/jvm/java-6-openjdk-i386/jre/lib/i386/libjava.so: symbol JVM_FindClassFromCaller, version SUNWprivate_1.1 not defined in file libjvm.so with link time reference

 

網(wǎng)上提供的一種解決方案是通過find –name 'CurrencyData.properties' 找到CurrencyData文件,把文件中的時間全部修改為10年以內(nèi)。然而我嘗試了這種方法并不能解決問題,于是嘗試把Bootstrap JDKopenjdk-6更換為OracleJDK6,終于解決問題。

  • 未取消掉JAVA_HOME變量

如果沒有在環(huán)境變量中添加unset JAVA_HOME,make Sanity時會出現(xiàn)以下錯誤

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.Exiting because of the above error(s).make: *** [post-sanity] Error 1

 

/etc/profile中添加unset JAVA_HOME以解決問題

還有許多在編譯過程中遇到的問題,在前文中已經(jīng)進行彌補和完善,相信大家按照這些步驟進行編譯,會省去不少麻煩。

   

6.  總結(jié)

通過自己動手編譯OpenJDK-7的源碼,我們可以深入了解JVM的編譯環(huán)境以及運行過程。通過解決編譯過程中遇到的問題,為后續(xù)對JVM的深入探索打下了良好的基礎(chǔ)。在此基礎(chǔ)上,我們還可以通過NetBeansHotspot進行運行和調(diào)試,進一步了解JVM源碼的結(jié)構(gòu)與細節(jié)。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Centos 安裝版JDK信息熟知
Linux 下安裝配置 JDK7
ubuntu 12.04安裝jdk
開源APM工具pinpoint安裝與使用
CentOS 7 下安裝JDK 1.8
生活服務(wù)
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服