前言
???? 隨著Java生態(tài)愈發(fā)龐大,各種各樣的新技術(shù)層出不窮,這也給大家的學(xué)習(xí)帶來了很多困惑,這么多技術(shù)我該學(xué)什么,盲目的在各種新技術(shù)間穿梭,并不能取得很好的效果。
???? 作為Java核心技術(shù)的JDK相信很多同學(xué)都看過源碼,了解過Java的內(nèi)存模型,但是很多時候debug到最后都是 native,這是讓人很沮喪的事情,于是乎了解JDK底層的實現(xiàn)變得極為重要。
????編譯OpenJDK源碼的文章很多,但是很少有從頭到尾搭建環(huán)境的文章,于是我這里就寫了這篇文章,這里涉及的主要步驟:
虛擬機(jī)的安裝
- 虛擬機(jī)的安裝
- Ubuntu系統(tǒng)鏡像安裝
- Ubuntu系統(tǒng)設(shè)置
- OpenJDK編譯
- Idea在Linux下的安裝
- netbeans在Linux下的安裝
- HotSpot源碼調(diào)試
WMware虛擬機(jī)安裝
WMware的版本有很多我們這里使用的版本是15.5.1的版本。
下載鏈接
鏈接: https://pan.baidu.com/s/1IABotf1mFjFMZqXE8yZ1BA 提取碼: atzw
下載軟件后,放到指定目錄下,雙擊打開,點(diǎn)擊下一步,如下圖所示:
勾選我接受的復(fù)選框,點(diǎn)擊下一步,如下圖所示:
選擇待安裝vm的磁盤位置,可以自定義,選擇磁盤位置后,點(diǎn)擊下一步,如下圖所示:
去勾選更新和加入體驗的復(fù)選框,點(diǎn)擊下一步,如下圖所示:
點(diǎn)擊下一步后彈出安裝進(jìn)度,等待安裝結(jié)束,如下圖所示:
到此為止我們就安裝成功了,在桌面上找到圖標(biāo)打開即可以使用了,如下圖所示:
Ubuntu系統(tǒng)鏡像安裝
這里用來安裝虛擬的Ubuntu的版本是16.04.6這個版本
下載鏈接
鏈接: https://pan.baidu.com/s/1X82lDWqBO7HcBD_likFtPQ 提取碼: i4y4
打開VMware虛擬機(jī)軟件,如下圖所示:
選擇新建虛擬機(jī),如下圖所示:
創(chuàng)建虛擬機(jī),選擇典型,然后下一步,如下圖所示:
選擇已下載的ubuntu-16.04.6-desktop-amd64.iso鏡像,然后點(diǎn)擊下一步,如下圖所示:
填寫創(chuàng)建Ubuntu虛擬機(jī)所需要的的基本信息,然后點(diǎn)擊下一步,如下圖所示:
填寫虛擬機(jī)名稱和安裝位置,這里建議在較大的盤中創(chuàng)建一個單獨(dú)的目錄進(jìn)行存儲,然后點(diǎn)擊下一步,如下圖所示:
指定磁盤大小和磁盤文件存儲形態(tài),如果只是用來進(jìn)行簡單的調(diào)試代碼默認(rèn)的20G足夠了,如果后面不夠可以在虛擬機(jī)設(shè)置中對其進(jìn)行調(diào)整,這里我們就設(shè)置默認(rèn)的20G,磁盤存儲有兩種形式單文件和多文件,多文件格式對于備份異?;謴?fù)更好,這里我們選擇多文件存儲,然后點(diǎn)擊下一步,如下圖所示:
由于后面在編譯OpenJDK時對內(nèi)存要求較高,這里在自定義硬件中我們將內(nèi)存調(diào)整到4G,然后點(diǎn)擊完成,如下圖所示:
等待Ubuntu安裝成功,這個過程大概需要十幾分鐘,如下圖所示:
Ubuntu系統(tǒng)設(shè)置
網(wǎng)絡(luò)設(shè)置
輸入密碼,登錄操作系統(tǒng),如下圖所示:
Ubuntu網(wǎng)絡(luò)設(shè)置,使用快捷鍵(Ctrl+Alt+T)打開命令行窗口,輸入ifconfig,查看當(dāng)前網(wǎng)絡(luò)配置,如下圖所示:
輸入route -n,查看網(wǎng)關(guān)配置,如下圖所示:
查看當(dāng)前Windows系統(tǒng)的DNS配置,作者使用的是Windows10,如下圖所示:
設(shè)置Ubuntu的網(wǎng)絡(luò)配置,如下圖所示:
測試使用Ubuntu自帶的火狐瀏覽器是否可以正常訪問百度,如下圖所示:
共享文件夾設(shè)置
虛擬機(jī)Ubuntu和Windows進(jìn)行文件共享,很多資料使用的都是虛擬機(jī)自帶的工具VMware Tools,但是很多時候操作過程中會出現(xiàn)很多意想不到的問題造成安裝失敗,浪費(fèi)很多時間,這里介紹一種更簡單的方式,通過網(wǎng)絡(luò)共享實現(xiàn)虛擬機(jī)文件共享。
方法如下:
在Downloads目錄下創(chuàng)建一個share文件夾,效果如圖所示:
在share文件夾上右鍵,選擇本地網(wǎng)絡(luò)共享,效果如圖所示:
按下圖勾選選項,然后點(diǎn)擊創(chuàng)建共享按鈕,效果如圖所示:
在windows系統(tǒng)中通過網(wǎng)絡(luò)找到share共享目錄,效果如圖所示:
OpenJDK編譯
在編譯OpenJDK過程中,需要用到的軟件如下:
jdk-7u80-linux-x64.tar
下載地址:
鏈接: https://pan.baidu.com/s/1LNd2Xkg93bsXDuEVFdjfQQ 提取碼: j3ix
openjdk-8u40-src-b25-10_feb_2015.zip
下載地址:
鏈接: https://pan.baidu.com/s/1eFVhrgmXOZ_oD8uQ_YEiUg 提取碼: kqkh
編譯流程
將需要的安裝包放到虛擬機(jī)share共享目錄,如下圖所示:
在Ubuntu虛擬機(jī)中解壓安裝包到Documents目錄,如下圖所示:
安裝依賴包(按照提示進(jìn)行操作),大概需要2分鐘
sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev sudo apt-get install libcups2-dev sudo apt-get install libfreetype6-dev sudo apt-get install libasound2-dev
安裝vim
sudo apt-get install vim
配置path
vim ~/.bashrc
在bashrc文件的末尾添加下面代碼,其中jdk1.7.0_80路徑根據(jù)實際情況填寫
export JAVA_HOME=/home/feng/Documents/jdk1.7.0_80 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH
驗證是否配置成功
source ~/.bashrc java -version
執(zhí)行命令編譯OpenJDK8,boot jdk按照實際目錄填寫
cd /home/feng/Documents/openjdk/ sudo bash configure --with-target-bits=64 --with-boot-jdk=/home/feng/Documents/jdk1.7.0_80/ --with-debug-level=slowdebug --enable-debug-symbols ZIP_DEBUGINFO_FILES=0
如果配置成功會顯示如下信息:
執(zhí)行下面的命令,開始編譯,這個時間較長
sudo make all DISABLE_HOTSPOT_OS_VERSION_CHECK=OK ZIP_DEBUGINFO_FILES=0
看到下面的畫面,證明編譯成功
Ubuntu下安裝Idea
我們這里使用的Idea2021.1的社區(qū)版。
下載鏈接
鏈接: https://pan.baidu.com/s/1w8eqjpWHn6J0DYX9TAwQmQ 提取碼: ygci
將下載的idea,放到share共享目錄下,并在虛擬機(jī)中解壓到Documents目錄,截圖如下:
在當(dāng)前用戶目錄下創(chuàng)建Makefile文件
cd ~ vim Makefile
在文件中添加以下代碼:
idea: sh /home/feng/Documents/idea-IC-211.6693.111/bin/idea.sh
通過make命令啟動idea
make idea
啟動后,點(diǎn)擊繼續(xù),截圖如下:
選擇不發(fā)送,截圖如下:
Ubuntu下安裝NetBeans
我們這里使用的NetBeans8.2的版本。
下載鏈接
鏈接: https://pan.baidu.com/s/1k40ZgtSx87rUvLaabazeDA 提取碼: 34u9
將下載的NetBeans,放到share共享目錄下,并在虛擬機(jī)中復(fù)制到桌面,截圖如下:
執(zhí)行以下命令,安裝NetBeans
cd /home/feng/Desktop/ sudo chown feng:feng jdk-8u111-nb-8_2-linux-x64.sh ./jdk-8u111-nb-8_2-linux-x64.sh
點(diǎn)擊下一步,安裝NetBeans,如下圖所示:
設(shè)置默認(rèn)jdk,點(diǎn)擊下一步,如下圖所示:
選擇初始化目錄,點(diǎn)擊下一步,如下圖所示:
去勾選檢查更新,點(diǎn)擊安裝,如下圖所示:
去勾選,點(diǎn)擊完成,如下圖所示:
點(diǎn)擊桌面的NetBeans ISE 8,2啟動,如下圖所示
安裝C/C++插件,如下圖所示
選擇可用插件,找到C/C++選中,點(diǎn)擊安裝,如下圖所示
點(diǎn)擊下一步,安裝C/C++插件,如下圖所示
勾選同意,點(diǎn)擊安裝,如下圖所示
HotSpot源碼調(diào)試
執(zhí)行下面命令,修改javahome,使用編譯好的OpenJDK作為默認(rèn)JDK
vim ~/.bashrc
修改bashrc文件,修改后效果如下圖:
export JAVA_HOME=/home/feng/Documents/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk
執(zhí)行java -version命令,檢查是否修改成功,如果成功,效果如下
source ~/.bashrc java -version
使用NetBeans創(chuàng)建OpenJDK工程,步驟如下:
基于現(xiàn)有的C/C++代碼創(chuàng)建工程,選擇如下圖,點(diǎn)擊下一步
選擇編譯后的OpenJDK的目錄,選擇定制,選擇如下圖,點(diǎn)擊下一步
按照默認(rèn)配置,點(diǎn)擊下一步,最終點(diǎn)擊完成
使用Idea,創(chuàng)建一個工程,編寫一個測下代碼,工程結(jié)構(gòu),如下圖
package com.feng;
public class Test {
public static void main(String[] args) {
String str = "test";
System.out.println(str);
}
}
運(yùn)行代碼進(jìn)行編譯,將class文件生存到class目錄下,如下圖
NetBeans中配置Test活動,步驟如下:
編輯Run Command,使用如下參數(shù),效果如圖:
"${OUTPUT_PATH}" -cp "/home/feng/IdeaProjects/Test/target/classes" com.feng.Test
點(diǎn)擊應(yīng)用,然后點(diǎn)擊確認(rèn),效果如圖:
切換到Test,點(diǎn)擊運(yùn)行,這個時候會彈出選擇可執(zhí)行的命令,這里需要選擇編譯后的OpenJDK中的java命令,效果如圖:
啟動成功后,會打印出來我們在idea中編寫的Test代碼的執(zhí)行結(jié)果,如下圖所示:
這個時候我們就可以在OpenJDK中添加斷點(diǎn),對OpenJDK進(jìn)行調(diào)試了,在openjdk->jdk->src->share->bin->java.c文件中JavaMain方法處添加斷點(diǎn)進(jìn)行調(diào)試,如下圖所示:
到這里整個OpenJDK源碼調(diào)試的過程就結(jié)束了,大家如果有什么問題,可以給我留言,大家共同交流進(jìn)步。
到此這篇關(guān)于 Java 從搭建虛擬機(jī)環(huán)境到最后調(diào)試 OpenJDK 源碼詳細(xì)過程的文章就介紹到這了,想要了解更多相關(guān) OpenJDK 源碼的內(nèi)容請搜索W3Cschool以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持!