HotSpot源碼閱讀和解析
從零開始閱讀HotSpot源碼
一、獲取并構(gòu)建HotSpot 源碼
HotSpot 源碼下載地址:
https://github.com/openjdk/jdk/tree/jdk8-b120
一、準(zhǔn)備環(huán)境
1.1、服務(wù)器資源
操作系統(tǒng):Centos 8.5 x64
操作軟件:CLion(JetBrains的產(chǎn)品)
# cat /proc/version
Linux version 3.10.0-1160.59.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Wed Feb 23 16:47:03 UTC 2022
# uname -a
Linux localhost.localdomain 3.10.0-1160.59.1.el7.x86_64 #1 SMP Wed Feb 23 16:47:03 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
二、下載源碼(OpenJDK8)
1.安裝hg 服務(wù)
yum install mercurial -y
2.使用hg 下載openjkd到 opt 目錄
cd /opt
3.更新代碼,操作和Git類似
cd /opt/jdk8u
hg pull
4.獲取完整源碼(下載時(shí)間較長)
sh get_source.sh
三、編譯源碼
構(gòu)建JDK8需要使用JDK7 update 7或者更高的版本作為引導(dǎo)(Bootstrap)JDK,但不應(yīng)該使用JDK8作為引導(dǎo)JDK;
JDK7下載: https://www.oracle.com/java/technologies/javase/javase7-archive-downloads.html
這里下載:jdk-7u80-linux-x64.tar.gz
1.將jdk-7u80-linux-x64.tar.gz文件上傳到linux
使用Xftp 7 或者 rz 命令上傳文件工具即可:
上傳到linux下的:/opt/tools/目錄下
2.解壓jdk7到/opt 目錄下
cd /opt/tools
tar -zxf jdk-7u80-linux-x64.tar.gz -C /opt
3.配置
cd /opt/jdk8u
chmod -x configure
4.安裝編譯所需要的工具包
yum install -y unzip zip libXtst-devel libXt-devel libXrender-devel cups-devel freetype-devel alsa-lib-devel fontconfig-devel
yum group info 'Development Tools'
yum groupinstall -y “Development Tools”
5.配置編譯環(huán)境
./configure --with-target-bits=64 --with-boot-jdk=/opt/jdk1.7.0_80/ --with-debug-level=slowdebug --with-native-debug-symbols=internal
配置說明:
–with-target-bits=64 :指定?成64位jdk;
–with-boot-jdk=/opt/jdk1.7.0_80/:jdk7的路徑;
–with-debug-level=slowdebug:編譯時(shí)debug的級(jí)別,有release, fastdebug, slowdebug 三種級(jí)別;
6.編譯(編譯時(shí)間較長、耐心等待)
make all
7.測(cè)試
./build/linux-x86_64-normal-server-slowdebug/jdk/bin/java -version
openjdk version "1.8.0-internal-debug"
OpenJDK Runtime Environment (build 1.8.0-internal-debug-root_2022_06_14_21_00-b00)
OpenJDK 64-Bit Server VM (build 25.71-b00-debug, mixed mode)
8.復(fù)制拷貝一份
zip jdk8u.zip jdk8u -r
四、Windows 遠(yuǎn)程調(diào)試
1.linux環(huán)境準(zhǔn)備
yum install cmake -y
yum install gcc-c++ -y
yum install gdb -y
yum install gdb-gdbserver -y
2.Windows環(huán)境準(zhǔn)備
1.首先用Clion新建一個(gè)空項(xiàng)目

image.png
2.設(shè)置遠(yuǎn)程調(diào)試

image.png

image.png

image.png
3.同步代碼(windows上的代碼需要和CentOS上的代碼一樣)連接信息

image.png
4.對(duì)應(yīng)目錄,本地目錄為新建的OpenJDK8項(xiàng)目目錄

image.png
5.同步時(shí)要排除本地目錄

image.png
6.下載遠(yuǎn)程代碼(下載之后linux上的代碼,可能會(huì)丟失某些文件,所以先把linxu的源碼備份一次)

image.png

image.png

image.png
7.設(shè)置遠(yuǎn)程調(diào)試,地址為CentOs地址,端口隨意

image.png

image.png
8.Linux環(huán)境準(zhǔn)備
將jdk8u還原
unzip jdk8u.zip
linux啟動(dòng)GDB,端口與之前的對(duì)應(yīng)(1234)
gdbserver :1234 /opt/jdk8u/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java -version

image.png
linux啟動(dòng)1234端口(防火墻)
vi /etc/sysconfig/iptables
略
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1234 -j ACCEPT
重啟防?墻
service iptables restart
4.打上斷點(diǎn),啟動(dòng)的Debug(比較慢,載入libjvm.debuginfo的時(shí)候)

image.png

image.png
結(jié)束