JDK(Java Development Kit):Java開發組件,是用於支持Java程序開發的最小環境,包括Java程序設計語言、Java虛擬機、Java API類庫。html
JRE(Java Runtime Environment):支持Java程序運行的標準環境,包括Java虛擬機、Java API類庫中的Java SE API子集。java
Java技術體系能夠分爲4個平臺:linux
JIT(Just In Time)編譯器。git
Java技術的將來:編程
函數式編程(如lambada)的一個重要優勢是這樣的程序自然地適合並行運行:小程序
函數式編程不須要考慮"死鎖"(deadlock),由於它不修改變量,因此根本不存在"鎖"線程的問題。沒必要擔憂一個線程的數據,被另外一個線程修改。如瀏覽器
OS:CentOS 7 64bit;
OpenJDK:openjdk-8u40; ruby
注意:下面的OpenJDK源碼的編譯過程沒有設置Bootstrap JDK。bash
書上說虛擬機有的代碼是使用Java自身實現的,所以編譯這些Java代碼須要用到一個可用的JDK,即「Bootstrap JDK」,這個JDK須要JDK6以後的版本。Bootstrap JDK須要在編譯前的環境變量設置裏指定路徑,可是我沒有進行設置,也成功編譯了源碼,所以不知道這個Bootstrap JDK是不是必須須要的,我編譯成功多是由於本地已經裝了一個Java,若是沒有在編譯前的環境變量裏設置,會自動把當前系統的環境變量指定的JDK當成Bootstrap JDK。具體Bootstrap JDK是否須要得在一個沒有安裝過Java的系統裏面測試。架構
首先安裝mercurial,由於OpenJDK是用mercurial管理的。
sudo yum install mercurial
而後克隆源碼,運行get_source.sh腳本得到全部源代碼。(書上給的能下載到打包好的源碼網址https://jdk7.java.net/source.html,如今只能下載到二進制源碼,而咱們須要的是cpp源碼,在網址裏的Archive裏選擇source下載,也是跳轉到下面給出的hg網址,應該是選擇不給提供打包的源碼了)
注意:不能直接從網址裏面找gz壓縮包下載,而後解壓運行get_source.sh腳本,若是沒下載mercurial會出現錯誤ERROR: Could not locate Mercurial command,由於裏面還要經過mercurial下載其它源代碼,
下載了mercurial再運行也會出現錯誤ERROR: Need initial repository to use this script,必須得用mercurial的hg命令來克隆項目再運行。應該跟git同樣,沒有初始化用戶信息是操做不了項目倉庫裏的某個文件,克隆下來整個項目應該會自動包含項目管理者的用戶信息,所以能夠操做。
在下載源代碼可能會有abort錯誤,緣由是由於外網的問題,自行解決。
hg clone http://hg.openjdk.java.net/jdk8u/jdk8u-dev/ cd jdk8u-dev sh ./get_source.sh
接下去設置環境變量,新建一個sh文件,例如env.sh,填入如下內容,而後sh env.sh執行
# 語言選項 export LANG=C # 容許自動下載依賴 export ALLOW_DOWNLOADS=true # 並行編譯的線程數,編譯時間長,爲了避免影響其餘工做,選擇爲1 export HOTSPOT_BUILD_JOBS=1 # 是否跳過與先前版本的比較 export SKIP_COMPARE_IMAGES=true # 是否使用預編譯頭文件,加快編譯速度 export USE_PRECOMPILED_HEADER=true # 是否使用增量編譯 export INCREMENTAL_BUILD=true # 編譯內容 export BUILD_LANGTOOLS=true export BUILD_JAXP=true export BUILD_JAXWS=true export BUILD_CORBA=true export BUILD_HOTSPOT=true export BUILD_JDK=true # 編譯版本 export SKIP_DEBUG_BUILD=true export SKIP_FASTDEBUG_BUILD=false export DEBUG_NAME=debug # 避開javaws和瀏覽器Java插件之類的部分的build export BUILD_DEPLOY=false export BUILD_INSTALL=false unset JAVA_HOME
運行OpenJDK源碼目錄下的configure文件
bash ./configure
若是缺乏某個環境,運行configure會提示,按提示的下載便可。
通常須要下載的以下
yum groupinstall "Development Tools"
yum install libXtst-devel libXt-devel libXrender-devel
yum install cups-devel
yum install freetype-devel
yum install alsa-lib-devel
configure運行成功的結果以下
在OpenJDK源碼目錄下運行make all
make all
編譯成功以後顯示以下
當前目錄下的bulid文件裏有個linux-x86_64-normal-server-release文件夾,就是編譯結果。裏面有許多文件,其中/images/j2sdk-image有和直接安裝OpenJDK後相似Java目錄結構,這就是整個JDK的完整編譯結果。具體查看過程以下
cd ./build/linux-x86_64-normal-server-release/images/j2sdk-image/bin ./java -version # 獲得 openjdk version "1.8.0-internal" OpenJDK Runtime Environment (build 1.8.0-internal-xx_2019_07_09_13_56-b00) OpenJDK 64-Bit Server VM (build 25.71-b00, mixed mode)
以後這個整個j2sdk-image文件夾就能夠被拷貝到任何地方,並配置環境變量使用。
配置變量能夠在用戶主目錄下建立.bash_profile裏文件,內容以下(其中OpenJDK_1.8.0就是上面的j2sdk-image的拷貝)
export JAVA_HOME=/usr/用戶名/java/OpenJDK_1.8.0 export CLASSPATH=./:$JAVA_HOME/lib export PATH=$JAVA_HOME/bin:$PATH
以後source .bash_profile使環境變量生效,用java -version查看結果。